2021-08-22 23:35:28 +02:00
|
|
|
module math
|
|
|
|
|
2022-05-20 07:45:54 +02:00
|
|
|
// hypot returns the hypotenuse of the triangle give two sides
|
2021-08-22 23:35:28 +02:00
|
|
|
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
|
|
|
|
}
|