]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
[BZ #16823] Fix log1pl returning wrong infinity sign
authorStefan Liebler <stli@linux.vnet.ibm.com>
Tue, 29 Apr 2014 13:43:36 +0000 (15:43 +0200)
committerAndreas Krebbel <krebbel@linux.vnet.ibm.com>
Tue, 29 Apr 2014 13:43:36 +0000 (15:43 +0200)
ChangeLog
sysdeps/ieee754/dbl-64/s_log1p.c
sysdeps/ieee754/flt-32/s_log1pf.c
sysdeps/ieee754/ldbl-128/s_log1pl.c

index 40072951655391a18afca918cda923ed9c360264..803d11414abf93ca16a9aba98663f07c0dedc2e2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2014-04-29  Stefan Liebler  <stli@linux.vnet.ibm.com>
+
+       [BZ #16823]
+       * sysdeps/ieee754/ldbl-128/s_log1pl.c (__log1pl):
+       Always divide by positive zero when computing -Inf result.
+       * sysdeps/ieee754/dbl-64/s_log1p.c (__log1p): Likewise.
+       * sysdeps/ieee754/flt-32/s_log1pf.c (__log1pf): Likewise.
+
 2014-04-28  Adhemerval Zanella  <azanella@linux.vnet.ibm.com>
 
        * sysdeps/powerpc/fpu/fclrexcpt.c (__feclearexcept): Do not update
index fd4dce5f2334b671e929e656bdf2e42c8707656f..c9221489370ff61a6bde475b9bbd403829ba28ef 100644 (file)
@@ -110,7 +110,7 @@ __log1p (double x)
       if (__glibc_unlikely (ax >= 0x3ff00000))           /* x <= -1.0 */
        {
          if (x == -1.0)
-           return -two54 / (x - x);            /* log1p(-1)=+inf */
+           return -two54 / zero;               /* log1p(-1)=-inf */
          else
            return (x - x) / (x - x);           /* log1p(x<-1)=NaN */
        }
index 030727710653f1e76cc74116afd7aed41472c2f5..5f00febc046857e0e1d4ff3a8951a251972372b2 100644 (file)
@@ -42,7 +42,7 @@ __log1pf(float x)
        k = 1;
        if (hx < 0x3ed413d7) {                  /* x < 0.41422  */
            if(ax>=0x3f800000) {                /* x <= -1.0 */
-               if(x==(float)-1.0) return -two25/(x-x); /* log1p(-1)=+inf */
+               if(x==(float)-1.0) return -two25/zero; /* log1p(-1)=-inf */
                else return (x-x)/(x-x);        /* log1p(x<-1)=NaN */
            }
            if(ax<0x31000000) {                 /* |x| < 2**-29 */
index d991e8a720381f63bef349af59f1b21adb588ea4..d8d89f0a8ca617176d004f0187d22067f236509b 100644 (file)
@@ -150,7 +150,7 @@ __log1pl (long double xm1)
   if (x <= 0.0L)
     {
       if (x == 0.0L)
-       return (-1.0L / (x - x));
+       return (-1.0L / zero);  /* log1p(-1) = -inf */
       else
        return (zero / (x - x));
     }