1
0
mirror of https://sourceware.org/git/glibc.git synced 2026-01-06 11:51:29 +03:00

PowerPC: fix hypot/hypof FP exceptions

This patch fixes hypot/hypotf spurious floating-point exceptions
generate by internal operations.
This commit is contained in:
Adhemerval Zanella
2013-05-06 14:40:17 -05:00
parent d5e8275481
commit 16e616a72f
5 changed files with 25 additions and 17 deletions

View File

@@ -26,6 +26,7 @@ static const double two600 = 4.149515568880993e+180;
static const double two1022 = 4.49423283715579e+307;
static const double twoM500 = 3.054936363499605e-151;
static const double twoM600 = 2.4099198651028841e-181;
static const double two60factor = 1.5592502418239997e+290;
static const double pdnum = 2.225073858507201e-308;
/* __ieee754_hypot(x,y)
@@ -87,9 +88,20 @@ __ieee754_hypot (double x, double y)
x = y;
y = t;
}
if (y == 0.0 || (x / y) > two60)
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)
{
return x + y;
if ((x / y) > two60)
return x + y;
}
else
{
if (x > (y * two60))
return x + y;
}
if (x > two500)
{