From 2c340c55324cbac34d7f32dfb645c56ad8bc212d Mon Sep 17 00:00:00 2001 From: Bananymous Date: Thu, 9 Jul 2026 09:54:57 +0300 Subject: [PATCH] BAN: Implement more numerically stable `hypot` --- BAN/include/BAN/Math.h | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/BAN/include/BAN/Math.h b/BAN/include/BAN/Math.h index 1a054927..50f7c480 100644 --- a/BAN/include/BAN/Math.h +++ b/BAN/include/BAN/Math.h @@ -2,6 +2,7 @@ #include #include +#include #include #include @@ -470,7 +471,17 @@ namespace BAN::Math template inline constexpr T hypot(T x, T y) { - return sqrt(x * x + y * y); + x = abs(x); + y = abs(y); + + if (x < y) + swap(x, y); + + if (y == (T)0.0) + return x; + + const T r = y / x; + return x * sqrt((T)1.0 + r * r); } #ifdef BAN_MATH_POP_OPTIONS