aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2012-11-22 14:59:45 +0000
committerJoseph Myers <joseph@codesourcery.com>2012-11-22 14:59:45 +0000
commitef1e0867c0f6b1a39625f45aa8a8a9d83fe739be (patch)
treed2e415709ef56e81a48b4e4d451a2c2a7f497273
parent1468ded38eb043991b3b0198ab55cacffb46ec04 (diff)
downloadglibc-ef1e0867c0f6b1a39625f45aa8a8a9d83fe739be.zip
glibc-ef1e0867c0f6b1a39625f45aa8a8a9d83fe739be.tar.gz
glibc-ef1e0867c0f6b1a39625f45aa8a8a9d83fe739be.tar.bz2
Fix ldbl-128ibm powl spurious underflows.
-rw-r--r--ChangeLog5
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/e_powl.c6
2 files changed, 10 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 34e93e5..ff04e57 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2012-11-22 Joseph Myers <joseph@codesourcery.com>
+ [BZ #14811]
+ * sysdeps/ieee754/ldbl-128ibm/e_powl.c (__ieee754_powl): Saturate
+ nonzero exponents with absolute value below 0x1p-117 to +/-
+ 0x1p-117.
+
[BZ #14869]
* sysdeps/ieee754/ldbl-128ibm/e_hypotl.c (__ieee754_hypotl): Scale
up arguments below 2**-450, not just those below 2**-500.
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_powl.c b/sysdeps/ieee754/ldbl-128ibm/e_powl.c
index 0fd4820..8216c49 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_powl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_powl.c
@@ -149,7 +149,7 @@ __ieee754_powl (long double x, long double y)
{
long double z, ax, z_h, z_l, p_h, p_l;
long double y1, t1, t2, r, s, t, u, v, w;
- long double s2, s_h, s_l, t_h, t_l;
+ long double s2, s_h, s_l, t_h, t_l, ay;
int32_t i, j, k, yisint, n;
u_int32_t ix, iy;
int32_t hx, hy;
@@ -284,6 +284,10 @@ __ieee754_powl (long double x, long double y)
return (hy > 0) ? huge * huge : tiny * tiny;
}
+ ay = y > 0 ? y : -y;
+ if (ay < 0x1p-117)
+ y = y < 0 ? -0x1p-117 : 0x1p-117;
+
n = 0;
/* take care subnormal number */
if (ix < 0x00100000)