diff options
author | Joseph Myers <joseph@codesourcery.com> | 2015-10-06 15:32:06 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2015-10-06 15:32:06 +0000 |
commit | 31d4459e42d239fb7d9d3f9532fcf580c6812fb3 (patch) | |
tree | 3cfe7e4329332a7a3f7d6e93fb0ad1bb675df82d | |
parent | d79b56892651fcfc1ae0f44d3d29d0fa03538ec1 (diff) | |
download | glibc-31d4459e42d239fb7d9d3f9532fcf580c6812fb3.zip glibc-31d4459e42d239fb7d9d3f9532fcf580c6812fb3.tar.gz glibc-31d4459e42d239fb7d9d3f9532fcf580c6812fb3.tar.bz2 |
Fix ldbl-128ibm logl (1) sign of zero result (bug 19077).
The ldbl-128ibm implementation of logl produces a zero with the wrong
sign for logl (1) in FE_DOWNWARD mode. This patch makes it explicitly
return 0.0L in that case, as in e.g. the ldbl-128 implementation.
Tested for powerpc.
[BZ #19077]
* sysdeps/ieee754/ldbl-128ibm/e_logl.c (__ieee754_logl): Return
0.0L for argument 1.0L.
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-128ibm/e_logl.c | 2 |
3 files changed, 7 insertions, 1 deletions
@@ -1,5 +1,9 @@ 2015-10-06 Joseph Myers <joseph@codesourcery.com> + [BZ #19077] + * sysdeps/ieee754/ldbl-128ibm/e_logl.c (__ieee754_logl): Return + 0.0L for argument 1.0L. + [BZ #19076] * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c (__log1pl): Divide by constant 0.0L when computing infinite result. @@ -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, 19076. + 19049, 19050, 19059, 19071, 19076, 19077. * 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/e_logl.c b/sysdeps/ieee754/ldbl-128ibm/e_logl.c index 58d6bc6..dcac380 100644 --- a/sysdeps/ieee754/ldbl-128ibm/e_logl.c +++ b/sysdeps/ieee754/ldbl-128ibm/e_logl.c @@ -219,6 +219,8 @@ __ieee754_logl(long double x) /* On this interval the table is not used due to cancellation error. */ if ((x <= 1.0078125L) && (x >= 0.9921875L)) { + if (x == 1.0L) + return 0.0L; z = x - 1.0L; k = 64; t = 1.0L; |