26 lines
520 B
V
26 lines
520 B
V
module math
|
|
|
|
// hypot returns the hypotenuse of the triangle give two sides
|
|
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
|
|
}
|