]> sourceware.org Git - glibc.git/commitdiff
math: Fix incorrect results of exp10m1f with some GCC versions master
authorFlorian Weimer <fweimer@redhat.com>
Wed, 6 Nov 2024 15:09:05 +0000 (16:09 +0100)
committerFlorian Weimer <fweimer@redhat.com>
Wed, 6 Nov 2024 15:09:05 +0000 (16:09 +0100)
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>
sysdeps/ieee754/flt-32/s_exp10m1f.c
sysdeps/ieee754/flt-32/s_exp2m1f.c

index 04a068ee324bf368d0e9939cbaf0ebbfae9e675a..ea3173a17485694ef6dccfdcd99196861ca31e47 100644 (file)
@@ -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 */
index b3f86409cce58f7abf710f825d1273cb6140e022..325ffb11b037d62c42db93fd5d04e33651cd15ff 100644 (file)
@@ -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 */
This page took 0.046904 seconds and 5 git commands to generate.