]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Fix ldbl-128ibm logl inaccuracy (bug 16386).
authorJoseph Myers <joseph@codesourcery.com>
Thu, 2 Jan 2014 16:35:46 +0000 (16:35 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Thu, 2 Jan 2014 16:35:46 +0000 (16:35 +0000)
This patch fixes bug 16386, ldbl-128ibm logl inaccuracy (with
consequent inaccuracy for lgammal) for arguments where the high double
is subnormal, which showed up while attempting to regenerate ulps for
powerpc-nofpu for 2.19.  The problem here is logic failing to allow
for subnormals when calculating the exponent of the argument.  Tested
for powerpc-nofpu.

* sysdeps/ieee754/ldbl-128ibm/e_logl.c (__ieee754_logl): Adjust
numbers with subnormal high part when calculating exponent.

ChangeLog
NEWS
sysdeps/ieee754/ldbl-128ibm/e_logl.c

index 8200122be7669d03b4db34da3b4e6040d6ba5089..7f4d564d0cabf87af56a64da08c9fb1ff95afd85 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2014-01-02  Joseph Myers  <joseph@codesourcery.com>
 
+       [BZ #16386]
+       * sysdeps/ieee754/ldbl-128ibm/e_logl.c (__ieee754_logl): Adjust
+       numbers with subnormal high part when calculating exponent.
+
        [BZ #16385]
        * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c (__asinhl): Use fabsl not
        fabs.
diff --git a/NEWS b/NEWS
index c96c0e3cd98a72718cd826cfc326152bd9baba0c..e0ea97aa0e1f86d369b4ecf9f6f2c71112627836 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -23,7 +23,8 @@ Version 2.19
   16038, 16041, 16055, 16071, 16072, 16074, 16077, 16078, 16103, 16112,
   16143, 16144, 16146, 16150, 16151, 16153, 16167, 16172, 16195, 16214,
   16245, 16271, 16274, 16283, 16289, 16293, 16314, 16316, 16330, 16337,
-  16338, 16356, 16365, 16366, 16369, 16372, 16375, 16379, 16384, 16385.
+  16338, 16356, 16365, 16366, 16369, 16372, 16375, 16379, 16384, 16385,
+  16386.
 
 * Slovenian translations for glibc messages have been contributed by the
   Translation Project's Slovenian team of translators.
index b7db2b9784f8fecd4388f86acff4ce84427f1840..58d6bc697268e8ec1a011972dd41507e63e5a908 100644 (file)
@@ -229,6 +229,14 @@ __ieee754_logl(long double x)
       /* Extract exponent and reduce domain to 0.703125 <= u < 1.40625  */
       unsigned int w0;
       e = (int) (m >> 20) - (int) 0x3fe;
+      if (e == -1022)
+       {
+         x *= 0x1p106L;
+         xhi = ldbl_high (x);
+         EXTRACT_WORDS (hx, lx, xhi);
+         m = hx;
+         e = (int) (m >> 20) - (int) 0x3fe - 106;
+       }
       m &= 0xfffff;
       w0 = m | 0x3fe00000;
       m |= 0x100000;