]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Don't generate underflow for very small values in log1pl.
authorDavid S. Miller <davem@davemloft.net>
Fri, 16 Nov 2012 17:31:38 +0000 (09:31 -0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 16 Nov 2012 17:31:38 +0000 (09:31 -0800)
* sysdeps/ieee754/ldbl-128/s_log1pl.c (__log1pl): If xm1 is
smaller than LDBL_EPSILON/2.0L, just return xm1.

ChangeLog
sysdeps/ieee754/ldbl-128/s_log1pl.c

index 8b980c14ab8a6f6d1f2e8ad2ce09e469e0743f12..64378be2ac9c11f0470893a8a4b9421324b39a71 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2012-11-16  David S. Miller  <davem@davemloft.net>
+
+       * sysdeps/ieee754/ldbl-128/s_log1pl.c (__log1pl): If xm1 is
+       smaller than LDBL_EPSILON/2.0L, just return xm1.
+
 2012-11-16  H.J. Lu  <hongjiu.lu@intel.com>
 
        * elf/tst-array1.c (init): Set constructor priority to 1000.
index 4ecea0fddd69d2133a31f781bd97ea70f4df4de2..fad18e9da2213a0bdd6f0e1af92cf9470bdf9b29 100644 (file)
@@ -138,6 +138,12 @@ __log1pl (long double xm1)
       && (u.parts32.w1 | u.parts32.w2 | u.parts32.w3) == 0)
     return xm1;
 
+  if ((hx & 0x7fffffff) < 0x3f8e0000)
+    {
+      if ((int) xm1 == 0)
+       return xm1;
+    }
+
   x = xm1 + 1.0L;
 
   /* log1p(-1) = -inf */