about summary refs log tree commit diff
path: root/sysdeps/ieee754/ldbl-128ibm
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 /sysdeps/ieee754/ldbl-128ibm
parent90b6a1e55fdbb3e6a3132742c26eb19666ad9e33 (diff)
downloadglibc-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')
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/e_logl.c8
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;