Fix BZ #14811 for ldbl-128 too.
authorDavid S. Miller <davem@davemloft.net>
Sat, 17 Nov 2012 05:39:54 +0000 (21:39 -0800)
committerDavid S. Miller <davem@davemloft.net>
Sat, 17 Nov 2012 05:39:54 +0000 (21:39 -0800)
[BZ #14811]
* sysdeps/ieee754/ldbl-128/e_powl.c (__ieee754_powl): Saturate
nonzero exponents with absolute value below 0x1p-128 to +/-
0x1p-128.

ChangeLog
sysdeps/ieee754/ldbl-128/e_powl.c

index 82c48f8fd09dd061802d79db4eb42d6ef21e0f41..9bdff02e286b3780206fa75cf2b1380ca8cc036a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2012-11-17  David S. Miller  <davem@davemloft.net>
+
+       [BZ #14811]
+       * sysdeps/ieee754/ldbl-128/e_powl.c (__ieee754_powl): Saturate
+       nonzero exponents with absolute value below 0x1p-128 to +/-
+       0x1p-128.
+
 2012-11-17  Joseph Myers  <joseph@codesourcery.com>
 
        * sysdeps/unix/sysv/linux/fxstatat.c: Include <string.h>.
index 40fc314730b07761c8db3e8dfb07b3fe5491978f..d131750718d287ef435da9be05d2262a32df44d7 100644 (file)
@@ -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;
@@ -282,6 +282,10 @@ __ieee754_powl (long double x, long double y)
        return (hy > 0) ? huge * huge : tiny * tiny;
     }
 
+  ay = y > 0 ? y : -y;
+  if (ay < 0x1p-128)
+    y = y < 0 ? -0x1p-128 : 0x1p-128;
+
   n = 0;
   /* take care subnormal number */
   if (ix < 0x00010000)