diff options
author | nsz <nsz@port70.net> | 2012-03-19 22:57:58 +0100 |
---|---|---|
committer | nsz <nsz@port70.net> | 2012-03-19 22:57:58 +0100 |
commit | 2786c7d21611b9fa3b2fe356542cf213e7dd0ba4 (patch) | |
tree | b3954e9cec7580f5dc851491d3b60d808aae4259 /src/math/log10l.c | |
parent | 01fdfd491b5d83b72099fbae14c4a71ed8e0b945 (diff) | |
download | musl-2786c7d21611b9fa3b2fe356542cf213e7dd0ba4.tar.gz musl-2786c7d21611b9fa3b2fe356542cf213e7dd0ba4.tar.bz2 musl-2786c7d21611b9fa3b2fe356542cf213e7dd0ba4.tar.xz musl-2786c7d21611b9fa3b2fe356542cf213e7dd0ba4.zip |
use scalbn or *2.0 instead of ldexp, fix fmal
Some code assumed ldexp(x, 1) is faster than 2.0*x,
but ldexp is a wrapper around scalbn which uses
multiplications inside, so this optimization is
wrong.
This commit also fixes fmal which accidentally
used ldexp instead of ldexpl loosing precision.
There are various additional changes from the
work-in-progress const cleanups.
Diffstat (limited to 'src/math/log10l.c')
-rw-r--r-- | src/math/log10l.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/src/math/log10l.c b/src/math/log10l.c index b954cc77..f0eeeafb 100644 --- a/src/math/log10l.c +++ b/src/math/log10l.c @@ -123,9 +123,9 @@ long double log10l(long double x) if (isnan(x)) return x; - if(x <= 0.0L) { - if(x == 0.0L) - return -1.0L / (x - x); + if(x <= 0.0) { + if(x == 0.0) + return -1.0 / (x - x); return (x - x) / (x - x); } if (x == INFINITY) @@ -142,12 +142,12 @@ long double log10l(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; @@ -158,13 +158,13 @@ long double log10l(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, 7)); - y = y - ldexpl(z, -1); /* -0.5x^2 + ... */ + y = y - 0.5*z; done: /* Multiply log of fraction by log10(e) |