aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2014-01-02 16:35:46 +0000
committerJoseph Myers <joseph@codesourcery.com>2014-01-02 16:35:46 +0000
commit819e5d50dd4d10dc359037eba74c70e74cb42739 (patch)
treefe51e811c4c6bb9e91bf2ab3730d34aa8c03452c
parent90b6a1e55fdbb3e6a3132742c26eb19666ad9e33 (diff)
downloadglibc-819e5d50dd4d10dc359037eba74c70e74cb42739.zip
glibc-819e5d50dd4d10dc359037eba74c70e74cb42739.tar.gz
glibc-819e5d50dd4d10dc359037eba74c70e74cb42739.tar.bz2
Fix ldbl-128ibm logl inaccuracy (bug 16386).
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.
-rw-r--r--ChangeLog4
-rw-r--r--NEWS3
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/e_logl.c8
3 files changed, 14 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 8200122..7f4d564 100644
--- 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 c96c0e3..e0ea97a 100644
--- 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.
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_logl.c b/sysdeps/ieee754/ldbl-128ibm/e_logl.c
index b7db2b9..58d6bc6 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_logl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_logl.c
@@ -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;