musl - musl - an implementation of the standard library for Linux-based systems

index : musl
musl - an implementation of the standard library for Linux-based systems
summary refs log tree commit diff
path: root/src/math/log10l.c
diff options
context:
space:
mode:
authornsz <nsz@port70.net>2012年03月19日 22:57:58 +0100
committernsz <nsz@port70.net>2012年03月19日 22:57:58 +0100
commit2786c7d21611b9fa3b2fe356542cf213e7dd0ba4 (patch)
treeb3954e9cec7580f5dc851491d3b60d808aae4259 /src/math/log10l.c
parent01fdfd491b5d83b72099fbae14c4a71ed8e0b945 (diff)
downloadmusl-2786c7d21611b9fa3b2fe356542cf213e7dd0ba4.tar.gz
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)
generated by cgit v1.2.1 (git 2.18.0) at 2025年10月06日 08:10:10 +0000

AltStyle によって変換されたページ (->オリジナル) /