aboutsummaryrefslogtreecommitdiff
path: root/math
AgeCommit message (Collapse)AuthorFilesLines
2025-01-03AArch64: Add vector tanpi routinesJoe Ramsay1-1/+1
Vector variant of the new C23 tanpi. New tests pass on AArch64.
2025-01-03AArch64: Add vector cospi routinesJoe Ramsay1-1/+1
Vector variant of the new C23 cospi. New tests pass on AArch64.
2025-01-03AArch64: Add vector sinpi to libmvecJoe Ramsay1-1/+1
Vector variant of the new C23 sinpi. New tests pass on AArch64.
2025-01-03math: Remove no-mathvec flagJoe Ramsay9-220/+215
More routines are to follow, some of which hit many failures in the current testsuite due to wrong sign of zero (mathvec routines are not required to get this right). Instead of disabling a large number of tests, change the failure condition such that, for vector routines, tests pass as long as computed == expected == 0.0, regardless of sign. Affected tests (vector tests for expm1, log1p, sin, tan and tanh) all still pass.
2025-01-04math: Add a reference to Clang's <tgmath.h> C23 issueH.J. Lu1-0/+1
Clang's <tgmath.h> doesn't support all C23 functions in glibc's <tgmath.h>: https://github.com/llvm/llvm-project/issues/121536 Signed-off-by: H.J. Lu <hjl.tools@gmail.com> Reviewed-by: Sam James <sam@gentoo.org>
2025-01-02new inputs with large errors for [a]cospi, [a]sinpi, [a]tanpi, atan2piPaul Zimmermann8-0/+2751
These inputs were generated with the programs from https://gitlab.inria.fr/zimmerma/math_accuracy, with rounding to nearest: * for univariate binary32 functions by exhaustive search * for other functions with the "threshold" parameter up to 10^6
2025-01-01Update copyright dates with scripts/update-copyrightsPaul Eggert411-411/+411
2024-12-22math: Fix clang warnings for math/test-tgmath-ret.cAdhemerval Zanella1-0/+6
clang warns that since the global variables are only used to function calls (without being actually used), they are not needed and will not be emitted. Signed-off-by: H.J. Lu <hjl.tools@gmail.com> Reviewed-by: Sam James <sam@gentoo.org>
2024-12-22Add test-config-cflags-float-store for -ffloat-storeH.J. Lu1-2/+4
Clang doesn't support -ffloat-store: clang: error: optimization flag '-ffloat-store' is not supported [-Werror,-Wignored-optimization-argument] Define test-config-cflags-float-store for -ffloat-store and use it in math/Makefile for testing. Signed-off-by: H.J. Lu <hjl.tools@gmail.com> Reviewed-by: Sam James <sam@gentoo.org>
2024-12-22Don't redefine INFINITY nor NANH.J. Lu1-8/+12
Since math/math.h isn't a system header, clang issues errors: In file included from test-flt-eval-method.c:20: In file included from ../include/math.h:7: ../math/math.h:91:11: error: 'INFINITY' macro redefined [-Werror,-Wmacro-redefined] 91 | # define INFINITY (__builtin_inff ()) | ^ /usr/bin/../lib/clang/19/include/float.h:173:11: note: previous definition is here 173 | # define INFINITY (__builtin_inff()) | ^ In file included from test-flt-eval-method.c:20: In file included from ../include/math.h:7: ../math/math.h:98:11: error: 'NAN' macro redefined [-Werror,-Wmacro-redefined] 98 | # define NAN (__builtin_nanf ("")) | ^ /usr/bin/../lib/clang/19/include/float.h:174:11: note: previous definition is here 174 | # define NAN (__builtin_nanf("")) Don't define INFINITY nor NAN if they are defined. Signed-off-by: H.J. Lu <hjl.tools@gmail.com> Reviewed-by: Sam James <sam@gentoo.org>
2024-12-22Check Clang 12 for __builtin_complexH.J. Lu1-1/+2
Since __builtin_complex was added to Clang 12, support __builtin_complex for Clang 12. Signed-off-by: H.J. Lu <hjl.tools@gmail.com> Reviewed-by: Sam James <sam@gentoo.org>
2024-12-22math: Exclude tgmath3-macro-tests for ClangH.J. Lu1-0/+5
tgmath3-macro-tests won't compile with <float.h> and <tgmath.h> from Clang due to missing C23 support: https://github.com/llvm/llvm-project/issues/97335 Disable them for now when Clang is used for testing so that "make check" can finish. Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
2024-12-21Don't use glibc <tgmath.h> when testing with ClangH.J. Lu1-6/+18
Clang has its own <tgmath.h> and doesn't use <tgmath.h> from glibc. Pass "-I." to compiler only if $($(<F)-no-include-dot) are undefined. Define it to yes for tgmath tests when testing with Clang. Signed-off-by: H.J. Lu <hjl.tools@gmail.com> Reviewed-by: Sam James <sam@gentoo.org>
2024-12-20math: xfail some tanpi tests for ibm128-libgccAdhemerval Zanella3-364/+364
On powerpc math/test-ibm128-tanpi shows multiple failures: testing long double (without inline functions) Failure: tanpi_downward (0xfffffffffffffffdp-1): Exception "Divide by zero" not set Failure: tanpi_downward (0xfffffffffffffffdp-1): errno set to 0, expected 34 (ERANGE) Failure: Test: tanpi_downward (0xfffffffffffffffdp-1) Result: is: 4.68843873182857939141363635204365e+28 0x1.2efbb6629d1d59b032520400df8p+95 should be: inf inf Failure: tanpi_downward (0x3fffffffffffffffffffffffffdp-1): Exception "Divide by zero" not set Failure: tanpi_downward (0x3fffffffffffffffffffffffffdp-1): errno set to 0, expected 34 (ERANGE) Failure: Test: tanpi_downward (0x3fffffffffffffffffffffffffdp-1) Result: is: 1.41444453325831960404472183124793e+16 0x1.9202627cbf98e052d5fdbeee1f8p+53 should be: inf inf Failure: tanpi_downward (-0xf.ffffffffffffbffffffffffffcp+1020): Exception "Invalid operation" set Failure: tanpi_downward (-0xf.ffffffffffffbffffffffffffcp+1020): Exception "Overflow" set Failure: tanpi_downward (-0xf.ffffffffffffbffffffffffffcp+1020): errno set to 33, expected 0 (unchanged) Failure: Test: tanpi_downward (-0xf.ffffffffffffbffffffffffffcp+1020) Result: is: qNaN should be: -0.00000000000000000000000000000000e+00 -0x0.000000000000000000000000000p+0 Failure: Test: tanpi_downward (0x3.fffffffffffffffcp+108) Result: is: 2.91356019227449116879287504834896e-15 0x1.a3e365fee24d4632f95a2235698p-49 should be: 0.00000000000000000000000000000000e+00 0x0.000000000000000000000000000p+0 difference: 2.91356019227449116879287504834896e-15 0x1.a3e365fee24d4632f95a2235698p-49 ulp : 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321 max.ulp : 8.0000 Failure: Test: tanpi_downward (0x3.ffffffffffffffffffffffffffp+108) Result: is: 7.94911926685664643005642781870827e-16 0x1.ca3c4b83eb5688e1474146dc338p-51 should be: 0.00000000000000000000000000000000e+00 0x0.000000000000000000000000000p+0 difference: 7.94911926685664643005642781870827e-16 0x1.ca3c4b83eb5688e1474146dc338p-51 ulp : 160891965142034222272327839154722485473479235229008379884749401713481320342777314570400076204240982703218835644458374555276642 max.ulp : 8.0000 Failure: tanpi_towardzero (0xfffffffffffffffdp-1): Exception "Divide by zero" not set Failure: tanpi_towardzero (0xfffffffffffffffdp-1): errno set to 0, expected 34 (ERANGE) Failure: Test: tanpi_towardzero (0xfffffffffffffffdp-1) Result: is: 2.14718475310122677917055904836884e+28 0x1.1584624c14882fff76592b4ec10p+94 should be: inf inf Failure: tanpi_towardzero (-0xfffffffffffffffdp-1): Exception "Divide by zero" not set Failure: tanpi_towardzero (-0xfffffffffffffffdp-1): errno set to 0, expected 34 (ERANGE) Failure: Test: tanpi_towardzero (-0xfffffffffffffffdp-1) Result: is: -2.14718475310122677917055904836884e+28 -0x1.1584624c14882fff76592b4ec10p+94 should be: -inf -inf Failure: tanpi_towardzero (0x3fffffffffffffffffffffffffdp-1): Exception "Divide by zero" not set Failure: tanpi_towardzero (0x3fffffffffffffffffffffffffdp-1): errno set to 0, expected 34 (ERANGE) Failure: Test: tanpi_towardzero (0x3fffffffffffffffffffffffffdp-1) Result: is: 6.60739946234609289593176521179840e+15 0x1.7796511d79d6ce55bc8bf083fe0p+52 should be: inf inf Failure: tanpi_towardzero (-0x3fffffffffffffffffffffffffdp-1): Exception "Divide by zero" not set Failure: tanpi_towardzero (-0x3fffffffffffffffffffffffffdp-1): errno set to 0, expected 34 (ERANGE) Failure: Test: tanpi_towardzero (-0x3fffffffffffffffffffffffffdp-1) Result: is: -6.60739946234609289593176521179840e+15 -0x1.7796511d79d6ce55bc8bf083fe0p+52 should be: -inf -inf Failure: Test: tanpi_towardzero (-0x3.fffffffffffffffcp+108) Result: is: -1.17953443892757434921819283936141e-14 -0x1.a8f8d97fb893518cbe5688935c0p-47 should be: -0.00000000000000000000000000000000e+00 -0x0.000000000000000000000000000p+0 difference: 1.17953443892757434921819283936141e-14 0x1.a8f8d97fb893518cbe5688935c0p-47 ulp : 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321 max.ulp : 8.0000 Failure: Test: tanpi_towardzero (-0x3.ffffffffffffffffffffffffffp+108) Result: is: -1.85584803206881692897837494734542e-14 -0x1.4e51e25c1f5ab4470a3a0a42c24p-46 should be: -0.00000000000000000000000000000000e+00 -0x0.000000000000000000000000000p+0 difference: 1.85584803206881692897837494734542e-14 0x1.4e51e25c1f5ab4470a3a0a42c24p-46 ulp : 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321 max.ulp : 8.0000 Failure: Test: tanpi_towardzero (0x3.fffffffffffffffcp+108) Result: is: 1.17953443892757434921819283936141e-14 0x1.a8f8d97fb893518cbe5688935c0p-47 should be: 0.00000000000000000000000000000000e+00 0x0.000000000000000000000000000p+0 difference: 1.17953443892757434921819283936141e-14 0x1.a8f8d97fb893518cbe5688935c0p-47 ulp : 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321 max.ulp : 8.0000 Failure: Test: tanpi_towardzero (0x3.ffffffffffffffffffffffffffp+108) Result: is: 1.85584803206881692897837494734542e-14 0x1.4e51e25c1f5ab4470a3a0a42c24p-46 should be: 0.00000000000000000000000000000000e+00 0x0.000000000000000000000000000p+0 difference: 1.85584803206881692897837494734542e-14 0x1.4e51e25c1f5ab4470a3a0a42c24p-46 ulp : 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321 max.ulp : 8.0000 Failure: tanpi_upward (-0xfffffffffffffffdp-1): Exception "Divide by zero" not set Failure: tanpi_upward (-0xfffffffffffffffdp-1): errno set to 0, expected 34 (ERANGE) Failure: Test: tanpi_upward (-0xfffffffffffffffdp-1) Result: is: -2.14718475310122677917055904836884e+28 -0x1.1584624c14882fff76592b4ec10p+94 should be: -inf -inf Failure: tanpi_upward (-0x3fffffffffffffffffffffffffdp-1): Exception "Divide by zero" not set Failure: tanpi_upward (-0x3fffffffffffffffffffffffffdp-1): errno set to 0, expected 34 (ERANGE) Failure: Test: tanpi_upward (-0x3fffffffffffffffffffffffffdp-1) Result: is: -6.60739946234609289593176521179829e+15 -0x1.7796511d79d6ce55bc8bf083fdbp+52 should be: -inf -inf Failure: Test: tanpi_upward (-0x3.fffffffffffffffcp+108) Result: is: -1.17953443892757434921819283936138e-14 -0x1.a8f8d97fb893518cbe5688935b0p-47 should be: -0.00000000000000000000000000000000e+00 -0x0.000000000000000000000000000p+0 difference: 1.17953443892757434921819283936139e-14 0x1.a8f8d97fb893518cbe5688935b0p-47 ulp : inf max.ulp : 8.0000 Failure: Test: tanpi_upward (-0x3.ffffffffffffffffffffffffffp+108) Result: is: -1.85584803206881692897837494734542e-14 -0x1.4e51e25c1f5ab4470a3a0a42c24p-46 should be: -0.00000000000000000000000000000000e+00 -0x0.000000000000000000000000000p+0 difference: 1.85584803206881692897837494734543e-14 0x1.4e51e25c1f5ab4470a3a0a42c24p-46 ulp : inf max.ulp : 8.0000 Failure: tanpi_upward (0xf.ffffffffffffbffffffffffffcp+1020): Exception "Invalid operation" set Failure: tanpi_upward (0xf.ffffffffffffbffffffffffffcp+1020): Exception "Overflow" set Failure: tanpi_upward (0xf.ffffffffffffbffffffffffffcp+1020): errno set to 33, expected 0 (unchanged) Failure: Test: tanpi_upward (0xf.ffffffffffffbffffffffffffcp+1020) Result: is: qNaN should be: 0.00000000000000000000000000000000e+00 0x0.000000000000000000000000000p+0
2024-12-18math: Fix the expected carg (inf) resultsAdhemerval Zanella3-28/+261
The pi defined constants are not the expected value for carg on non-default rounding modes (similar to atan). Instead use autogenerated value.
2024-12-18math: Fix the expected atan2f (inf) resultsAdhemerval Zanella3-56/+2366
The pi defined constants are not the expected value for atan2 on non-default rounding modes. Instead use the autogenerated value. Reviewed-by: DJ Delorie <dj@redhat.com>
2024-12-18math: Fix the expected atanf (inf) resultsAdhemerval Zanella3-2/+52
The M_PI_2 (lit_pi_2_d) constant is not the expected value for atanf on non-default rounding modes. Instead use the autogenerated value.
2024-12-18math: Add inf support on gen-auto-libm-tests.cAdhemerval Zanella1-4/+27
For some correctly rounded inputs where infinity might generate a number (like atanf), comparing to a pre-defined constant does not yield the expected result in all rounding modes. The most straightforward way to handle it would be to get the expected result from mpfr, where it handles all the rounding modes.
2024-12-18math: Fix spurious-divbyzero flag nameAdhemerval Zanella1-1/+1
Reviewed-by: DJ Delorie <dj@redhat.com>
2024-12-12Implement C23 atan2piJoseph Myers11-1/+14568
C23 adds various <math.h> function families originally defined in TS 18661-4. Add the atan2pi functions (atan2(y,x)/pi). Tested for x86_64 and x86, and with build-many-glibcs.py.
2024-12-12math: Remove __XXX math functions from installed math.h [BZ #32418]H.J. Lu3-36/+50
Since libm doesn't export __XXX math functions, don't declare them in the installed math.h by adding <bits/mathcalls-macros.h> to declare __XXX math functions internally for glibc build. This fixes BZ #32418. Signed-off-by: H.J. Lu <hjl.tools@gmail.com> Reviewed-by: Sam James <sam@gentoo.org>
2024-12-11Implement C23 atanpiJoseph Myers11-1/+1532
C23 adds various <math.h> function families originally defined in TS 18661-4. Add the atanpi functions (atan(x)/pi). Tested for x86_64 and x86, and with build-many-glibcs.py.
2024-12-10Implement C23 asinpiJoseph Myers11-1/+2618
C23 adds various <math.h> function families originally defined in TS 18661-4. Add the asinpi functions (asin(x)/pi). Tested for x86_64 and x86, and with build-many-glibcs.py.
2024-12-09Implement C23 acospiJoseph Myers11-1/+3329
C23 adds various <math.h> function families originally defined in TS 18661-4. Add the acospi functions (acos(x)/pi). Tested for x86_64 and x86, and with build-many-glibcs.py.
2024-12-05Implement C23 tanpiJoseph Myers11-1/+9320
C23 adds various <math.h> function families originally defined in TS 18661-4. Add the tanpi functions (tan(pi*x)). Tested for x86_64 and x86, and with build-many-glibcs.py.
2024-12-05math: xfail some sinpi tests for ibm128-libgccAdhemerval Zanella2-254/+254
On powerpc math/test-ibm128-sinpi shows: testing long double (without inline functions) Failure: sinpi_downward (-0xf.ffffffffffffbffffffffffffcp+1020): Exception "Invalid operation" set Failure: sinpi_downward (-0xf.ffffffffffffbffffffffffffcp+1020): Exception "Overflow" set Failure: sinpi_downward (-0xf.ffffffffffffbffffffffffffcp+1020): errno set to 33, expected 0 (unchanged) Failure: Test: sinpi_downward (-0xf.ffffffffffffbffffffffffffcp+1020) Result: is: qNaN should be: -0.00000000000000000000000000000000e+00 -0x0.000000000000000000000000000p+0 Failure: Test: sinpi_downward (0x3.fffffffffffffffcp+108) Result: is: 2.97479253223185882765417834495004e-15 0x1.acb679186c7b49a36c9ec63e110p-49 should be: 0.00000000000000000000000000000000e+00 0x0.000000000000000000000000000p+0 difference: 2.97479253223185882765417834495004e-15 0x1.acb679186c7b49a36c9ec63e110p-49 ulp : 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321 max.ulp : 4.0000 Failure: Test: sinpi_downward (0x3.ffffffffffffffffffffffffffp+108) Result: is: 2.63250110604328276654475674742669e-15 0x1.7b6225fa8503a5a8c514f5c0208p-49 should be: 0.00000000000000000000000000000000e+00 0x0.000000000000000000000000000p+0 difference: 2.63250110604328276654475674742669e-15 0x1.7b6225fa8503a5a8c514f5c0208p-49 ulp : 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321 max.ulp : 4.0000 Failure: Test: sinpi_towardzero (-0x3.fffffffffffffffcp+108) Result: is: -1.71856472474338625450766636956702e-14 -0x1.3596cf230d8f69346d93d8c3100p-46 should be: -0.00000000000000000000000000000000e+00 -0x0.000000000000000000000000000p+0 difference: 1.71856472474338625450766636956702e-14 0x1.3596cf230d8f69346d93d8c3100p-46 ulp : 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321 max.ulp : 3.0000 Failure: Test: sinpi_towardzero (-0x3.ffffffffffffffffffffffffffp+108) Result: is: -9.73792846364428462525599942305655e-15 -0x1.5ed8897ea140e96a31453d6e580p-47 should be: -0.00000000000000000000000000000000e+00 -0x0.000000000000000000000000000p+0 difference: 9.73792846364428462525599942305655e-15 0x1.5ed8897ea140e96a31453d6e580p-47 ulp : 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321 max.ulp : 3.0000 Failure: Test: sinpi_towardzero (0x3.fffffffffffffffcp+108) Result: is: 1.71856472474338625450766636956702e-14 0x1.3596cf230d8f69346d93d8c3100p-46 should be: 0.00000000000000000000000000000000e+00 0x0.000000000000000000000000000p+0 difference: 1.71856472474338625450766636956702e-14 0x1.3596cf230d8f69346d93d8c3100p-46 ulp : 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321 max.ulp : 3.0000 Failure: Test: sinpi_towardzero (0x3.ffffffffffffffffffffffffffp+108) Result: is: 9.73792846364428462525599942305655e-15 0x1.5ed8897ea140e96a31453d6e580p-47 should be: 0.00000000000000000000000000000000e+00 0x0.000000000000000000000000000p+0 difference: 9.73792846364428462525599942305655e-15 0x1.5ed8897ea140e96a31453d6e580p-47 ulp : 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321 max.ulp : 3.0000 Failure: Test: sinpi_upward (-0x3.fffffffffffffffcp+108) Result: is: -1.71856472474338625450766636956709e-14 -0x1.3596cf230d8f69346d93d8c3110p-46 should be: -0.00000000000000000000000000000000e+00 -0x0.000000000000000000000000000p+0 difference: 1.71856472474338625450766636956710e-14 0x1.3596cf230d8f69346d93d8c3110p-46 ulp : inf max.ulp : 4.0000 Failure: Test: sinpi_upward (-0x3.ffffffffffffffffffffffffffp+108) Result: is: -9.73792846364428462525599942305708e-15 -0x1.5ed8897ea140e96a31453d6e598p-47 should be: -0.00000000000000000000000000000000e+00 -0x0.000000000000000000000000000p+0 difference: 9.73792846364428462525599942305709e-15 0x1.5ed8897ea140e96a31453d6e598p-47 ulp : inf max.ulp : 4.0000 Failure: sinpi_upward (0xf.ffffffffffffbffffffffffffcp+1020): Exception "Invalid operation" set Failure: sinpi_upward (0xf.ffffffffffffbffffffffffffcp+1020): Exception "Overflow" set Failure: sinpi_upward (0xf.ffffffffffffbffffffffffffcp+1020): errno set to 33, expected 0 (unchanged) Failure: Test: sinpi_upward (0xf.ffffffffffffbffffffffffffcp+1020) Result: is: qNaN should be: 0.00000000000000000000000000000000e+00 0x0.000000000000000000000000000p+0
2024-12-05math: xfail some cospi tests for ibm128-libgccAdhemerval Zanella2-402/+402
On powerpc math/test-ibm128-cospi shows: testing long double (without inline functions) Failure: cospi_downward (-0xf.ffffffffffffbffffffffffffcp+1020): Exception "Invalid operation" set Failure: cospi_downward (-0xf.ffffffffffffbffffffffffffcp+1020): Exception "Overflow" set Failure: cospi_downward (-0xf.ffffffffffffbffffffffffffcp+1020): errno set to 33, expected 0 (unchanged) Failure: Test: cospi_downward (-0xf.ffffffffffffbffffffffffffcp+1020) Result: is: qNaN should be: 1.00000000000000000000000000000000e+00 0x1.000000000000000000000000000p+0 Failure: Test: cospi_downward (0x3.fffffffffffffffcp+108) Result: is: 9.99999999999999999999999999995574e-01 0x1.ffffffffffffffffffffffff4c8p-1 should be: 1.00000000000000000000000000000000e+00 0x1.000000000000000000000000000p+0 difference: 4.42501664022411309598141492088312e-30 0x1.670000000000000000000000000p-98 ulp : 179.5000 max.ulp : 4.0000 Failure: Test: cospi_downward (0x3.ffffffffffffffffffffffffffp+108) Result: is: 9.99999999999999999999999999996524e-01 0x1.ffffffffffffffffffffffff730p-1 should be: 1.00000000000000000000000000000000e+00 0x1.000000000000000000000000000p+0 difference: 3.47591836363008326759542899077727e-30 0x1.1a0000000000000000000000000p-98 ulp : 141.0000 max.ulp : 4.0000 Failure: Test: cospi_towardzero (-0x3.fffffffffffffffcp+108) Result: is: 9.99999999999999999999999999852310e-01 0x1.ffffffffffffffffffffffe8990p-1 should be: 1.00000000000000000000000000000000e+00 0x1.000000000000000000000000000p+0 difference: 1.47689552599346303944427057331536e-28 0x1.767000000000000000000000000p-93 ulp : 5991.0000 max.ulp : 4.0000 Failure: Test: cospi_towardzero (-0x3.ffffffffffffffffffffffffffp+108) Result: is: 9.99999999999999999999999999952569e-01 0x1.fffffffffffffffffffffff87c0p-1 should be: 1.00000000000000000000000000000000e+00 0x1.000000000000000000000000000p+0 difference: 4.74302619264133348003801799876275e-29 0x1.e10000000000000000000000000p-95 ulp : 1924.0000 max.ulp : 4.0000 Failure: Test: cospi_towardzero (0x3.fffffffffffffffcp+108) Result: is: 9.99999999999999999999999999852310e-01 0x1.ffffffffffffffffffffffe8990p-1 should be: 1.00000000000000000000000000000000e+00 0x1.000000000000000000000000000p+0 difference: 1.47689552599346303944427057331536e-28 0x1.767000000000000000000000000p-93 ulp : 5991.0000 max.ulp : 4.0000 Failure: Test: cospi_towardzero (0x3.ffffffffffffffffffffffffffp+108) Result: is: 9.99999999999999999999999999952569e-01 0x1.fffffffffffffffffffffff87c0p-1 should be: 1.00000000000000000000000000000000e+00 0x1.000000000000000000000000000p+0 difference: 4.74302619264133348003801799876275e-29 0x1.e10000000000000000000000000p-95 ulp : 1924.0000 max.ulp : 4.0000 Failure: Test: cospi_upward (-0x3.fffffffffffffffcp+108) Result: is: 9.99999999999999999999999999852323e-01 0x1.ffffffffffffffffffffffe899bp-1 should be: 1.00000000000000000000000000000000e+00 0x1.000000000000000000000000000p+0 difference: 1.47673235656615530277812119019587e-28 0x1.766568e20369c00000000000000p-93 ulp : 5990.3382 max.ulp : 4.0000 Failure: Test: cospi_upward (-0x3.ffffffffffffffffffffffffffp+108) Result: is: 9.99999999999999999999999999952583e-01 0x1.fffffffffffffffffffffff87cbp-1 should be: 1.00000000000000000000000000000000e+00 0x1.000000000000000000000000000p+0 difference: 4.74136253815267677203679334037676e-29 0x1.e0d4cf1e9076600000000000000p-95 ulp : 1923.3252 max.ulp : 4.0000 Failure: cospi_upward (0xf.ffffffffffffbffffffffffffcp+1020): Exception "Invalid operation" set Failure: cospi_upward (0xf.ffffffffffffbffffffffffffcp+1020): Exception "Overflow" set Failure: cospi_upward (0xf.ffffffffffffbffffffffffffcp+1020): errno set to 33, expected 0 (unchanged) Failure: Test: cospi_upward (0xf.ffffffffffffbffffffffffffcp+1020) Result: is: qNaN should be: 1.00000000000000000000000000000000e+00 0x1.000000000000000000000000000p+0
2024-12-05Use M_LIT in place of M_MLIT for literalsJoseph Myers2-2/+2
This should fix the reported issue building cospi and sinpi with GCC 6. Tested for x86_64 (not with GCC 6).
2024-12-05Fix and sort variables in MakefilesH.J. Lu1-15/+15
Fix variables in Makefiles: 1. There is a tab, not a space, between "variable" and =, +=, :=. 2. The last entry doesn't have a trailing \. and sort them. Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
2024-12-04Implement C23 sinpiJoseph Myers11-1/+10130
C23 adds various <math.h> function families originally defined in TS 18661-4. Add the sinpi functions (sin(pi*x)). Tested for x86_64 and x86, and with build-many-glibcs.py.
2024-12-04Implement C23 cospiJoseph Myers11-1/+9471
C23 adds various <math.h> function families originally defined in TS 18661-4. Add the cospi functions (cos(pi*x)). Tested for x86_64 and x86, and with build-many-glibcs.py.
2024-11-22math: Split s_erfF in erff and erfcAdhemerval Zanella1-0/+1
So we can eventually replace each implementation. Reviewed-by: DJ Delorie <dj@redhat.com>
2024-10-11replace tgammaf by the CORE-MATH implementationPaul Zimmermann1-3/+3
The CORE-MATH implementation is correctly rounded (for any rounding mode). This can be checked by exhaustive tests in a few minutes since there are less than 2^32 values to check against for example GNU MPFR. This patch also adds some bench values for tgammaf. Tested on x86_64 and x86 (cfarm26). With the initial GNU libc code it gave on an Intel(R) Core(TM) i7-8700: "tgammaf": { "": { "duration": 3.50188e+09, "iterations": 2e+07, "max": 602.891, "min": 65.1415, "mean": 175.094 } } With the new code: "tgammaf": { "": { "duration": 3.30825e+09, "iterations": 5e+07, "max": 211.592, "min": 32.0325, "mean": 66.1649 } } With the initial GNU libc code it gave on cfarm26 (i686): "tgammaf": { "": { "duration": 3.70505e+09, "iterations": 6e+06, "max": 2420.23, "min": 243.154, "mean": 617.509 } } With the new code: "tgammaf": { "": { "duration": 3.24497e+09, "iterations": 1.8e+07, "max": 1238.15, "min": 101.155, "mean": 180.276 } } Signed-off-by: Alexei Sibidanov <sibid@uvic.ca> Signed-off-by: Paul Zimmermann <Paul.Zimmermann@inria.fr> Changes in v2: - include <math.h> (fix the linknamespace failures) - restored original benchtests/strcoll-inputs/filelist#en_US.UTF-8 file - restored original wrapper code (math/w_tgammaf_compat.c), except for the dealing with the sign - removed the tgammaf/float entries in all libm-test-ulps files - address other comments from Joseph Myers (https://sourceware.org/pipermail/libc-alpha/2024-July/158736.html) Changes in v3: - pass NULL argument for signgam from w_tgammaf_compat.c - use of math_narrow_eval - added more comments Changes in v4: - initialize local_signgam to 0 in math/w_tgamma_template.c - replace sysdeps/ieee754/dbl-64/gamma_productf.c by dummy file Changes in v5: - do not mention local_signgam any more in math/w_tgammaf_compat.c - initialize local_signgam to 1 instead of 0 in w_tgamma_template.c and added comment Changes in v6: - pass NULL as 2nd argument of __ieee754_gammaf_r in w_tgammaf_compat.c, and check for NULL in e_gammaf_r.c Changes in v7: - added Signed-off-by line for Alexei Sibidanov (author of the code) Changes in v8: - added Signed-off-by line for Paul Zimmermann (submitted of the patch) Changes in v9: - address comments from review by Adhemerval Zanella Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2024-09-19AArch64: Add vector logp1 alias for log1pJoe Ramsay1-1/+1
This enables vectorisation of C23 logp1, which is an alias for log1p. There are no new tests or ulp entries because the new symbols are simply aliases. Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
2024-09-04Do not set errno for overflowing NaN payload in strtod/nan (bug 32045)Joseph Myers2-0/+54
As reported in bug 32045, it's incorrect for strtod/nan functions to set errno based on overflowing payload (strtod should only set errno for overflow / underflow of its actual result, and potentially if nothing in the string can be parsed as a number at all; nan should be a pure function that never sets it). Save and restore errno around the internal strtoull call and add associated test coverage. Tested for x86_64.
2024-09-04Improve NaN payload testingJoseph Myers1-5/+54
There are two separate sets of tests of NaN payloads in glibc: * libm-test-{get,set}payload* verify that getpayload, setpayload, setpayloadsig and __builtin_nan functions are consistent in their payload handling. * test-nan-payload verifies that strtod-family functions and the not-built-in nan functions are consistent in their payload handling. Nothing, however, connects the two sets of functions (i.e., verifies that strtod / nan are consistent with getpayload / setpayload / __builtin_nan). Improve test-nan-payload to check actual payload value with getpayload rather than just verifyin