aboutsummaryrefslogtreecommitdiff
path: root/v_windows/v/vlib/math/hypot.v
diff options
context:
space:
mode:
Diffstat (limited to 'v_windows/v/vlib/math/hypot.v')
-rw-r--r--v_windows/v/vlib/math/hypot.v24
1 files changed, 24 insertions, 0 deletions
diff --git a/v_windows/v/vlib/math/hypot.v b/v_windows/v/vlib/math/hypot.v
new file mode 100644
index 0000000..4137505
--- /dev/null
+++ b/v_windows/v/vlib/math/hypot.v
@@ -0,0 +1,24 @@
+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
+}