diff options
author | Joseph Myers <joseph@codesourcery.com> | 2015-10-06 15:14:26 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2015-10-06 15:14:26 +0000 |
commit | d79b56892651fcfc1ae0f44d3d29d0fa03538ec1 (patch) | |
tree | a104e632dd2f035727115b98861f3cb0191d8557 | |
parent | 3670da6bfb1ffd17d9bdce2d31d79656be0991b5 (diff) | |
download | glibc-d79b56892651fcfc1ae0f44d3d29d0fa03538ec1.zip glibc-d79b56892651fcfc1ae0f44d3d29d0fa03538ec1.tar.gz glibc-d79b56892651fcfc1ae0f44d3d29d0fa03538ec1.tar.bz2 |
Fix ldbl-128ibm log1pl (-1) sign of infinity (bug 19076).
The ldbl-128ibm implementation of log1pl produces an infinity with the
wrong sign for log1pl (-1) in FE_DOWNWARD mode. This patch fixes this
by changing a division (-1.0L / (x - x)) (incorrect in FE_DOWNWARD
mode) to (-1.0L / 0.0L) (correct in all rounding modes).
Tested for powerpc.
[BZ #19076]
* sysdeps/ieee754/ldbl-128ibm/s_log1pl.c (__log1pl): Divide by
constant 0.0L when computing infinite result.
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-128ibm/s_log1pl.c | 2 |
3 files changed, 8 insertions, 2 deletions
@@ -1,3 +1,9 @@ +2015-10-06 Joseph Myers <joseph@codesourcery.com> + + [BZ #19076] + * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c (__log1pl): Divide by + constant 0.0L when computing infinite result. + 2015-10-06 Florian Weimer <fweimer@redhat.com> [BZ #10432] @@ -18,7 +18,7 @@ Version 2.23 18820, 18823, 18824, 18825, 18857, 18863, 18870, 18872, 18873, 18875, 18887, 18921, 18951, 18952, 18956, 18961, 18966, 18967, 18969, 18970, 18977, 18980, 18981, 18985, 19003, 19012, 19016, 19018, 19032, 19046, - 19049, 19050, 19059, 19071. + 19049, 19050, 19059, 19071, 19076. * The obsolete header <regexp.h> has been removed. Programs that require this header must be updated to use <regex.h> instead. diff --git a/sysdeps/ieee754/ldbl-128ibm/s_log1pl.c b/sysdeps/ieee754/ldbl-128ibm/s_log1pl.c index a0e24d7..ad9a1fe 100644 --- a/sysdeps/ieee754/ldbl-128ibm/s_log1pl.c +++ b/sysdeps/ieee754/ldbl-128ibm/s_log1pl.c @@ -149,7 +149,7 @@ __log1pl (long double xm1) if (x <= 0.0L) { if (x == 0.0L) - return (-1.0L / (x - x)); + return (-1.0L / 0.0L); else return (zero / (x - x)); } |