/* Pythagorean addition using floats
- Copyright (C) 2011 Free Software Foundation, Inc.
+ Copyright (C) 2011, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Adhemerval Zanella <azanella@br.ibm.com>, 2011
static const float two30 = 1.0737418e09;
-static const float two50 = 1.1259000e15;
-static const float two60 = 1.1529221e18;
-static const float two126 = 8.5070592e+37;
-static const float twoM50 = 8.8817842e-16;
-static const float twoM60 = 6.7762644e-21;
-static const float pdnum = 1.1754939e-38;
-
/* __ieee754_hypotf(x,y)
- *
- * This a FP only version without any FP->INT conversion.
- * It is similar to default C version, making appropriates
- * overflow and underflows checks as well scaling when it
- * is needed.
- */
+
+ This a FP only version without any FP->INT conversion.
+ It is similar to default C version, making appropriates
+ overflow and underflows checks as using double precision
+ instead of scaling. */
#ifdef _ARCH_PWR7
/* POWER7 isinf and isnan optimizations are fast. */
{
return x + y;
}
- if (x > two50)
- {
- x *= twoM60;
- y *= twoM60;
- return __ieee754_sqrtf (x * x + y * y) / twoM60;
- }
- if (y < twoM50)
- {
- if (y <= pdnum)
- {
- x *= two126;
- y *= two126;
- return __ieee754_sqrtf (x * x + y * y) / two126;
- }
- else
- {
- x *= two60;
- y *= two60;
- return __ieee754_sqrtf (x * x + y * y) / two60;
- }
- }
- return __ieee754_sqrtf (x * x + y * y);
+
+ return __ieee754_sqrt ((double) x * x + (double) y * y);
}
strong_alias (__ieee754_hypotf, __hypotf_finite)