diff options
author | Szabolcs Nagy <nsz@port70.net> | 2021-02-05 19:51:36 +0000 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2021-02-10 14:06:50 -0500 |
commit | 964104f9f0e056cf58d9defa0b716d7756f040f6 (patch) | |
tree | 6d71a99a105627e40fd9c2a1acfa161fa9a9e39f | |
parent | c4c38e6364323b6d83ba3428464e19987b981d7a (diff) | |
download | musl-964104f9f0e056cf58d9defa0b716d7756f040f6.tar.gz musl-964104f9f0e056cf58d9defa0b716d7756f040f6.tar.xz musl-964104f9f0e056cf58d9defa0b716d7756f040f6.zip |
math: fix expm1f overflow threshold
the threshold was wrong so expm1f overflowed to inf a bit too early and on most targets uint32_t compare is faster than float compare so use that. this also fixes sinhf incorrectly returning nan for some values where the internal expm1f overflowed.
-rw-r--r-- | src/math/expm1f.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/src/math/expm1f.c b/src/math/expm1f.c index 297e0b44..09a41afe 100644 --- a/src/math/expm1f.c +++ b/src/math/expm1f.c @@ -16,7 +16,6 @@ #include "libm.h" static const float -o_threshold = 8.8721679688e+01, /* 0x42b17180 */ ln2_hi = 6.9313812256e-01, /* 0x3f317180 */ ln2_lo = 9.0580006145e-06, /* 0x3717f7d1 */ invln2 = 1.4426950216e+00, /* 0x3fb8aa3b */ @@ -41,7 +40,7 @@ float expm1f(float x) return x; if (sign) return -1; - if (x > o_threshold) { + if (hx > 0x42b17217) { /* x > log(FLT_MAX) */ x *= 0x1p127f; return x; } |