Merge remote-tracking branch 'nsz/math'
[musl] / src / math / log1pl.c
index 17eb4ce..edb48df 100644 (file)
  *                      Relative error:
  * arithmetic   domain     # trials      peak         rms
  *    IEEE     -1.0, 9.0    100000      8.2e-20    2.5e-20
- *
- * ERROR MESSAGES:
- *
- * log singularity:  x-1 = 0; returns -INFINITY
- * log domain:       x-1 < 0; returns NAN
  */
 
 #include "libm.h"
@@ -118,13 +113,13 @@ long double log1pl(long double xm1)
        if (xm1 == 0.0)
                return xm1;
 
-       x = xm1 + 1.0L;
+       x = xm1 + 1.0;
 
        /* Test for domain errors.  */
-       if (x <= 0.0L) {
-               if (x == 0.0L)
-                       return -INFINITY;
-               return NAN;
+       if (x <= 0.0) {
+               if (x == 0.0)
+                       return -1/x; /* -inf with divbyzero */
+               return 0/0.0f; /* nan with invalid */
        }
 
        /* Separate mantissa from exponent.
@@ -136,12 +131,12 @@ long double log1pl(long double xm1)
        if (e > 2 || e < -2) {
                if (x < SQRTH) { /* 2(2x-1)/(2x+1) */
                        e -= 1;
-                       z = x - 0.5L;
-                       y = 0.5L * z + 0.5L;
+                       z = x - 0.5;
+                       y = 0.5 * z + 0.5;
                } else { /*  2 (x-1)/(x+1)   */
-                       z = x - 0.5L;
-                       z -= 0.5L;
-                       y = 0.5L * x  + 0.5L;
+                       z = x - 0.5;
+                       z -= 0.5;
+                       y = 0.5 * x  + 0.5;
                }
                x = z / y;
                z = x*x;
@@ -156,12 +151,12 @@ long double log1pl(long double xm1)
        if (x < SQRTH) {
                e -= 1;
                if (e != 0)
-                       x = 2.0 * x - 1.0L;
+                       x = 2.0 * x - 1.0;
                else
                        x = xm1;
        } else {
                if (e != 0)
-                       x = x - 1.0L;
+                       x = x - 1.0;
                else
                        x = xm1;
        }