float __ieee754_hypotf (float x, float y) { TEST_INF_NAN (x, y); return __ieee754_sqrt ((double) x * x + (double) y * y); }
double __ieee754_hypot (double x, double y) { x = fabs (x); y = fabs (y); TEST_INF_NAN (x, y); if (y > x) { double t = x; x = y; y = t; } if (y == 0.0) return x; /* if y is higher enough, y * 2^60 might overflow. The tests if y >= 1.7976931348623157e+308/2^60 (two60factor) and uses the appropriate check to avoid the overflow exception generation. */ if (y > two60factor) { if ((x / y) > two60) return x + y; } else { if (x > (y * two60)) return x + y; } if (x > two500) { x *= twoM600; y *= twoM600; return __ieee754_sqrt (x * x + y * y) / twoM600; } if (y < twoM500) { if (y <= pdnum) { x *= two1022; y *= two1022; double ret = __ieee754_sqrt (x * x + y * y) / two1022; math_check_force_underflow_nonneg (ret); return ret; } else { x *= two600; y *= two600; return __ieee754_sqrt (x * x + y * y) / two600; } } return __ieee754_sqrt (x * x + y * y); }