From ef1e0867c0f6b1a39625f45aa8a8a9d83fe739be Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Thu, 22 Nov 2012 14:59:45 +0000 Subject: [PATCH] Fix ldbl-128ibm powl spurious underflows. --- ChangeLog | 5 +++++ sysdeps/ieee754/ldbl-128ibm/e_powl.c | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 34e93e5..ff04e57 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2012-11-22 Joseph Myers + [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) -- 2.7.4