aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2024-11-06 16:09:05 +0100
committerFlorian Weimer <fweimer@redhat.com>2024-11-06 16:09:05 +0100
commitba60be873554ecd141b55ea82647714933c0dbd4 (patch)
treec5e684e2e255634d422c0072cd76ba7f7744d9de
parentff254cabd64bec6b6810ee1e1f0c901d273efaca (diff)
downloadglibc-ba60be873554ecd141b55ea82647714933c0dbd4.tar.xz
glibc-ba60be873554ecd141b55ea82647714933c0dbd4.zip
math: Fix incorrect results of exp10m1f with some GCC versions
On GCC 11 (x86-64), the previous code produced test failures like this one: Failure: Test: exp10m1_towardzero (-0x1.1p+4) Result: is: -1.00000000e+00 -0x1.000000p+0 should be: -9.99999940e-01 -0x1.fffffep-1 difference: 5.96046447e-08 0x1.000000p-24 ulp : 1.0000 max.ulp : 0.0000 Apply a similar fix to exp2m1f. Co-authored-by: Paul Zimmermann <Paul.Zimmermann@inria.fr> Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
-rw-r--r--sysdeps/ieee754/flt-32/s_exp10m1f.c2
-rw-r--r--sysdeps/ieee754/flt-32/s_exp2m1f.c2
2 files changed, 2 insertions, 2 deletions
diff --git a/sysdeps/ieee754/flt-32/s_exp10m1f.c b/sysdeps/ieee754/flt-32/s_exp10m1f.c
index 04a068ee32..ea3173a174 100644
--- a/sysdeps/ieee754/flt-32/s_exp10m1f.c
+++ b/sysdeps/ieee754/flt-32/s_exp10m1f.c
@@ -40,7 +40,7 @@ __exp10m1f (float x)
{ /* x < -7.52575 */
if (ax > (0xffu << 23))
return x + x; /* nan */
- return (ux == 0xff800000) ? -0x1p+0 : -0x1p+0 + 0x1p-26f;
+ return (ux == 0xff800000) ? -0x1p+0f : -0x1p+0f + 0x1p-26f;
}
else if (__glibc_unlikely (ax > 0x421a209au))
{ /* x > 38.5318 */
diff --git a/sysdeps/ieee754/flt-32/s_exp2m1f.c b/sysdeps/ieee754/flt-32/s_exp2m1f.c
index b3f86409cc..325ffb11b0 100644
--- a/sysdeps/ieee754/flt-32/s_exp2m1f.c
+++ b/sysdeps/ieee754/flt-32/s_exp2m1f.c
@@ -41,7 +41,7 @@ __exp2m1f (float x)
{ /* x <= -25 */
if (ax > (0xffu << 23))
return x + x; /* nan */
- return (ux == 0xff800000) ? -0x1p+0 : -0x1p+0 + 0x1p-26f;
+ return (ux == 0xff800000) ? -0x1p+0f : -0x1p+0f + 0x1p-26f;
}
else if (__glibc_unlikely (ax >= 0x43000000u))
{ /* x >= 128 */