diff options
author | Joseph Myers <joseph@codesourcery.com> | 2015-10-21 16:40:20 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2015-10-21 16:40:20 +0000 |
commit | 0a90a8f2b9af6dd226558df5d3825e0e9ccd4ce3 (patch) | |
tree | 3089be81a979063289fe998a6f14681fa00ecd5a | |
parent | 1245e51596059a9844cff0938b10009c3b156115 (diff) | |
download | glibc-0a90a8f2b9af6dd226558df5d3825e0e9ccd4ce3.tar glibc-0a90a8f2b9af6dd226558df5d3825e0e9ccd4ce3.tar.gz glibc-0a90a8f2b9af6dd226558df5d3825e0e9ccd4ce3.tar.bz2 glibc-0a90a8f2b9af6dd226558df5d3825e0e9ccd4ce3.zip |
Fix ldbl-128 j0l spurious underflows (bug 19156).
My recent addition of more tests for j0 showed up that the ldbl-128
implementation of j0l produces spurious underflow exceptions for
arguments close to 0 (when the result is very close to 1). This patch
fixes this by just returning the argument in that case.
Tested for mips64 (where it fixes the recently-added tests that were
previously failing).
[BZ #19156]
* sysdeps/ieee754/ldbl-128/e_j0l.c (__ieee754_j0l): Return 1 for
arguments very close to 0.
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-128/e_j0l.c | 2 |
3 files changed, 9 insertions, 1 deletions
@@ -1,3 +1,9 @@ +2015-10-21 Joseph Myers <joseph@codesourcery.com> + + [BZ #19156] + * sysdeps/ieee754/ldbl-128/e_j0l.c (__ieee754_j0l): Return 1 for + arguments very close to 0. + 2015-10-21 Chris Metcalf <cmetcalf@ezchip.com> * sysdeps/unix/sysv/linux/tile/sysdep.h (PSEUDO_END) @@ -20,7 +20,7 @@ Version 2.23 18952, 18953, 18956, 18961, 18966, 18967, 18969, 18970, 18977, 18980, 18981, 18982, 18985, 19003, 19007, 19012, 19016, 19018, 19032, 19046, 19049, 19050, 19059, 19071, 19074, 19076, 19077, 19078, 19079, 19085, - 19086, 19088, 19094, 19095, 19124, 19125, 19129, 19134, 19137. + 19086, 19088, 19094, 19095, 19124, 19125, 19129, 19134, 19137, 19156. * There is now a --disable-timezone-tools configure option for disabling the building and installing of the timezone related utilities (zic, zdump, and diff --git a/sysdeps/ieee754/ldbl-128/e_j0l.c b/sysdeps/ieee754/ldbl-128/e_j0l.c index 1320de7044..c208916a79 100644 --- a/sysdeps/ieee754/ldbl-128/e_j0l.c +++ b/sysdeps/ieee754/ldbl-128/e_j0l.c @@ -693,6 +693,8 @@ __ieee754_j0l (long double x) xx = fabsl (x); if (xx <= 2.0L) { + if (xx < 0x1p-57L) + return 1.0L; /* 0 <= x <= 2 */ z = xx * xx; p = z * z * neval (z, J0_2N, NJ0_2N) / deval (z, J0_2D, NJ0_2D); |