X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmath%2Fexp10.c;h=26899ebac90e1a094d422efcd01806e5cc31e53f;hb=63a4c9adf227a6f6a5f7f70f6dc3f8863f846927;hp=16d704a71095ee72c300038ad37ea6e28257e457;hpb=a917c03706d94564082d5ccff032a3e2c3dad537;p=musl diff --git a/src/math/exp10.c b/src/math/exp10.c index 16d704a7..26899eba 100644 --- a/src/math/exp10.c +++ b/src/math/exp10.c @@ -1,6 +1,6 @@ #define _GNU_SOURCE #include -#include "libc.h" +#include double exp10(double x) { @@ -11,7 +11,9 @@ double exp10(double x) 1e10, 1e11, 1e12, 1e13, 1e14, 1e15 }; double n, y = modf(x, &n); - if (fabs(n) < 16) { + union {double f; uint64_t i;} u = {n}; + /* fabs(n) < 16 without raising invalid on nan */ + if ((u.i>>52 & 0x7ff) < 0x3ff+4) { if (!y) return p10[(int)n+15]; y = exp2(3.32192809488736234787031942948939 * y); return y * p10[(int)n+15];