v
Зеркало из https://github.com/vlang/v
1module math
2
3// hypot returns the hypotenuse of the triangle give two sides
4pub fn hypot(x f64, y f64) f64 {
5if is_inf(x, 0) || is_inf(y, 0) {
6return inf(1)
7}
8if is_nan(x) || is_nan(y) {
9return nan()
10}
11mut result := 0.0
12if x != 0.0 || y != 0.0 {
13abs_x := abs(x)
14abs_y := abs(y)
15cmin, cmax := minmax(abs_x, abs_y)
16rat := cmin / cmax
17root_term := sqrt(1.0 + rat * rat)
18if cmax < max_f64 / root_term {
19result = cmax * root_term
20} else {
21panic('overflow in hypot_e function')
22}
23}
24return result
25}
26