math: raise invalid flag in ilogb*.c on +-0, +-inf and nan
[musl] / src / math / expf.c
index 8925a6f..3c3e2ab 100644 (file)
@@ -16,7 +16,6 @@
 #include "libm.h"
 
 static const float
-one     = 1.0,
 halF[2] = {0.5,-0.5,},
 huge    = 1.0e+30,
 o_threshold =  8.8721679688e+01,  /* 0x42b17180 */
@@ -33,7 +32,7 @@ invln2 = 1.4426950216e+00,        /* 0x3fb8aa3b */
 P1 =  1.6666625440e-1, /*  0xaaaa8f.0p-26 */
 P2 = -2.7667332906e-3; /* -0xb55215.0p-32 */
 
-static volatile float twom100 = 7.8886090522e-31; /* 2**-100=0x0d800000 */
+static const volatile float twom100 = 7.8886090522e-31; /* 2**-100=0x0d800000 */
 
 float expf(float x)
 {
@@ -72,8 +71,8 @@ float expf(float x)
                STRICT_ASSIGN(float, x, hi - lo);
        } else if(hx < 0x39000000)  {  /* |x|<2**-14 */
                /* raise inexact */
-               if (huge+x > one)
-                       return one + x;
+               if (huge+x > 1.0f)
+                       return 1.0f + x;
        } else
                k = 0;
 
@@ -85,8 +84,8 @@ float expf(float x)
                SET_FLOAT_WORD(twopk, 0x3f800000+((k+100)<<23));
        c  = x - t*(P1+t*P2);
        if (k == 0)
-               return one - ((x*c)/(c - 2.0f) - x);
-       y = one - ((lo - (x*c)/(2.0f - c)) - hi);
+               return 1.0f - ((x*c)/(c - 2.0f) - x);
+       y = 1.0f - ((lo - (x*c)/(2.0f - c)) - hi);
        if (k < -125)
                return y*twopk*twom100;
        if (k == 128)