]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Fix powl inaccuracy for ldbl-128ibm (bug 14914).
authorJoseph Myers <joseph@codesourcery.com>
Tue, 4 Dec 2012 14:39:24 +0000 (14:39 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Tue, 4 Dec 2012 14:39:24 +0000 (14:39 +0000)
ChangeLog
NEWS
sysdeps/ieee754/ldbl-128ibm/e_powl.c

index cab8d1bb29fb2740bd70ab35d9a1ea70b1af95cc..3338301a2e79bf364926017eb005f4993d718445 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2012-12-04  Joseph Myers  <joseph@codesourcery.com>
+
+       [BZ #14914]
+       * sysdeps/ieee754/ldbl-128ibm/e_powl.c (__ieee754_powl): Clear
+       whole low double instead of just low 47 bits when splitting values
+       into two parts.
+
 2012-12-03  Allan McRae  <allan@archlinux.org>
 
        * manual/stdio.texi (Predefined Printf Handlers): Remove
diff --git a/NEWS b/NEWS
index 744df378337b0b2aad199cdf237a9865b1c47c44..24f6302dfac842d6909c950d72b483f1269ca89d 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -22,7 +22,7 @@ Version 2.17
   14661, 14669, 14672, 14683, 14694, 14716, 14719, 14743, 14767, 14783,
   14784, 14785, 14793, 14796, 14797, 14801, 14803, 14805, 14807, 14811,
   14815, 14821, 14822, 14824, 14828, 14831, 14835, 14838, 14856, 14863,
-  14865, 14866, 14868, 14869, 14871, 14879, 14889, 14893.
+  14865, 14866, 14868, 14869, 14871, 14879, 14889, 14893, 14914.
 
 * CVE-2011-4609 svc_run() produces high cpu usage when accept fails with
   EMFILE has been fixed (Bugzilla #14889).
index 8216c4906b74c85bc8bcc0eb231fe6591802b1aa..8bd35d0c8899bba62d0acd137799d91dc5c48515 100644 (file)
@@ -324,13 +324,13 @@ __ieee754_powl (long double x, long double y)
 
   o.value = s_h;
   o.parts32.w3 = 0;
-  o.parts32.w2 &= 0xffff8000;
+  o.parts32.w2 0;
   s_h = o.value;
   /* t_h=ax+bp[k] High */
   t_h = ax + bp[k];
   o.value = t_h;
   o.parts32.w3 = 0;
-  o.parts32.w2 &= 0xffff8000;
+  o.parts32.w2 0;
   t_h = o.value;
   t_l = ax - (t_h - bp[k]);
   s_l = v * ((u - s_h * t_h) - s_h * t_l);
@@ -344,7 +344,7 @@ __ieee754_powl (long double x, long double y)
   t_h = 3.0 + s2 + r;
   o.value = t_h;
   o.parts32.w3 = 0;
-  o.parts32.w2 &= 0xffff8000;
+  o.parts32.w2 0;
   t_h = o.value;
   t_l = r - ((t_h - 3.0) - s2);
   /* u+v = s*(1+...) */
@@ -354,7 +354,7 @@ __ieee754_powl (long double x, long double y)
   p_h = u + v;
   o.value = p_h;
   o.parts32.w3 = 0;
-  o.parts32.w2 &= 0xffff8000;
+  o.parts32.w2 0;
   p_h = o.value;
   p_l = v - (p_h - u);
   z_h = cp_h * p_h;            /* cp_h+cp_l = 2/(3*log2) */
@@ -364,7 +364,7 @@ __ieee754_powl (long double x, long double y)
   t1 = (((z_h + z_l) + dp_h[k]) + t);
   o.value = t1;
   o.parts32.w3 = 0;
-  o.parts32.w2 &= 0xffff8000;
+  o.parts32.w2 0;
   t1 = o.value;
   t2 = z_l - (((t1 - t) - dp_h[k]) - z_h);
 
@@ -377,7 +377,7 @@ __ieee754_powl (long double x, long double y)
   y1 = y;
   o.value = y1;
   o.parts32.w3 = 0;
-  o.parts32.w2 &= 0xffff8000;
+  o.parts32.w2 0;
   y1 = o.value;
   p_l = (y - y1) * t1 + y * t2;
   p_h = y1 * t1;
@@ -421,7 +421,7 @@ __ieee754_powl (long double x, long double y)
   t = p_l + p_h;
   o.value = t;
   o.parts32.w3 = 0;
-  o.parts32.w2 &= 0xffff8000;
+  o.parts32.w2 0;
   t = o.value;
   u = t * lg2_h;
   v = (p_l - (t - p_h)) * lg2 + t * lg2_l;