diff options
author | Joseph Myers <joseph@codesourcery.com> | 2014-01-02 16:35:46 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2014-01-02 16:35:46 +0000 |
commit | 819e5d50dd4d10dc359037eba74c70e74cb42739 (patch) | |
tree | fe51e811c4c6bb9e91bf2ab3730d34aa8c03452c /sysdeps/ieee754/ldbl-128ibm/e_logl.c | |
parent | 90b6a1e55fdbb3e6a3132742c26eb19666ad9e33 (diff) | |
download | glibc-819e5d50dd4d10dc359037eba74c70e74cb42739.tar.gz glibc-819e5d50dd4d10dc359037eba74c70e74cb42739.tar.xz glibc-819e5d50dd4d10dc359037eba74c70e74cb42739.zip |
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.
Diffstat (limited to 'sysdeps/ieee754/ldbl-128ibm/e_logl.c')
-rw-r--r-- | sysdeps/ieee754/ldbl-128ibm/e_logl.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_logl.c b/sysdeps/ieee754/ldbl-128ibm/e_logl.c index b7db2b9784..58d6bc6972 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; |