use scalbn or *2.0 instead of ldexp, fix fmal
[musl] / src / math / logl.c
index ee7ca64..ffd8103 100644 (file)
@@ -119,8 +119,8 @@ long double logl(long double x)
                return x;
        if (x == INFINITY)
                return x;
-       if (x <= 0.0L) {
-               if (x == 0.0L)
+       if (x <= 0.0) {
+               if (x == 0.0)
                        return -INFINITY;
                return NAN;
        }
@@ -137,12 +137,12 @@ long double logl(long double x)
        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,14 +156,14 @@ long double logl(long double x)
        /* logarithm using log(1+x) = x - .5x**2 + x**3 P(x)/Q(x) */
        if (x < SQRTH) {
                e -= 1;
-               x = ldexpl(x, 1) - 1.0L; /*  2x - 1  */
+               x = 2.0*x - 1.0;
        } else {
-               x = x - 1.0L;
+               x = x - 1.0;
        }
        z = x*x;
        y = x * (z * __polevll(x, P, 6) / __p1evll(x, Q, 6));
        y = y + e * C2;
-       z = y - ldexpl(z, -1);   /*  y - 0.5 * z  */
+       z = y - 0.5*z;
        /* Note, the sum of above terms does not exceed x/4,
         * so it contributes at most about 1/4 lsb to the error.
         */