25 lines
457 B
V
25 lines
457 B
V
|
module math
|
||
|
|
||
|
pub fn hypot(x f64, y f64) f64 {
|
||
|
if is_inf(x, 0) || is_inf(y, 0) {
|
||
|
return inf(1)
|
||
|
}
|
||
|
if is_nan(x) || is_nan(y) {
|
||
|
return nan()
|
||
|
}
|
||
|
mut result := 0.0
|
||
|
if x != 0.0 || y != 0.0 {
|
||
|
abs_x := abs(x)
|
||
|
abs_y := abs(y)
|
||
|
min, max := minmax(abs_x, abs_y)
|
||
|
rat := min / max
|
||
|
root_term := sqrt(1.0 + rat * rat)
|
||
|
if max < max_f64 / root_term {
|
||
|
result = max * root_term
|
||
|
} else {
|
||
|
panic('overflow in hypot_e function')
|
||
|
}
|
||
|
}
|
||
|
return result
|
||
|
}
|