]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Fix ldbl-128ibm logl (1) sign of zero result (bug 19077).
authorJoseph Myers <joseph@codesourcery.com>
Tue, 6 Oct 2015 15:32:06 +0000 (15:32 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Tue, 6 Oct 2015 15:32:06 +0000 (15:32 +0000)
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.

ChangeLog
NEWS
sysdeps/ieee754/ldbl-128ibm/e_logl.c

index 17388a7927868819dd0092e32271917fe76dc0b4..ac4c1d4aba3043bacaf698e04e8f43b6f7ba57db 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/NEWS b/NEWS
index b93a5dc4e96d3712d7defe98778f2a0b79fdb9c4..e3c0795fe535093ce6d2b2acecffceb7d2843ef9 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -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.
index 58d6bc697268e8ec1a011972dd41507e63e5a908..dcac38062c67f76e1b43dc10a4a5ee273278c274 100644 (file)
@@ -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;