diff options
| author | Joseph Myers <josmyers@redhat.com> | 2024-12-10 20:42:20 +0000 |
|---|---|---|
| committer | Joseph Myers <josmyers@redhat.com> | 2024-12-10 20:42:20 +0000 |
| commit | f962932206eca2cfed0a26e72220ad3465bf9e65 (patch) | |
| tree | 33f72059fe06461b8da5f234a70f8352822a4405 | |
| parent | a9944a52c967ce76a5894c30d0274b824df43c7a (diff) | |
| download | glibc-f962932206eca2cfed0a26e72220ad3465bf9e65.tar.xz glibc-f962932206eca2cfed0a26e72220ad3465bf9e65.zip | |
Implement C23 asinpi
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.
51 files changed, 2921 insertions, 2 deletions
@@ -36,7 +36,7 @@ Major new features: functions for float, double, long double, _FloatN and _FloatNx, and a type-generic macro in <tgmath.h>. - - Trigonometric functions: acospi, cospi, sinpi, tanpi. + - Trigonometric functions: acospi, asinpi, cospi, sinpi, tanpi. * The GNU C Library now supports a feature test macro _ISOC2Y_SOURCE to enable features from the draft ISO C2Y standard. Only some features from diff --git a/manual/math.texi b/manual/math.texi index c815e6b547..32c5c057e0 100644 --- a/manual/math.texi +++ b/manual/math.texi @@ -442,6 +442,23 @@ Logarithms}.) If both @var{x} and @var{y} are zero, @code{atan2} returns zero. @end deftypefun +@deftypefun double asinpi (double @var{x}) +@deftypefunx float asinpif (float @var{x}) +@deftypefunx {long double} asinpil (long double @var{x}) +@deftypefunx _FloatN asinpifN (_Float@var{N} @var{x}) +@deftypefunx _FloatNx asinpifNx (_Float@var{N}x @var{x}) +@standards{TS 18661-4:2015, math.h} +@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} +These functions compute the arcsine of @var{x}, divided by pi. The +result is in the interval between @code{-0.5} and @code{0.5} (inclusive). + +The arcsine function is defined mathematically only over the domain +@code{-1} to @code{1}. If @var{x} is outside the domain, +@code{asinpi} signals a domain error. + +The @code{asinpi} functions are from TS 18661-4:2015. +@end deftypefun + @deftypefun double acospi (double @var{x}) @deftypefunx float acospif (float @var{x}) @deftypefunx {long double} acospil (long double @var{x}) diff --git a/math/Makefile b/math/Makefile index 8209d14e37..87ff79b269 100644 --- a/math/Makefile +++ b/math/Makefile @@ -94,6 +94,7 @@ gen-libm-calls = \ k_casinhF \ k_casinhF \ s_acospiF \ + s_asinpiF \ s_cacosF \ s_cacoshF \ s_canonicalizeF \ @@ -621,6 +622,7 @@ libm-test-funcs-auto = \ acospi \ asin \ asinh \ + asinpi \ atan \ atan2 \ atanh \ @@ -930,6 +932,7 @@ tgmath3-macros = \ acospi \ asin \ asinh \ + asinpi \ atan \ atan2 \ atanh \ @@ -1313,6 +1316,7 @@ CFLAGS-w_acosh.c += -fno-builtin-acoshl CFLAGS-s_acospi.c += -fno-builtin-acospil CFLAGS-w_asin.c += -fno-builtin-asinl CFLAGS-s_asinh.c += -fno-builtin-asinhl +CFLAGS-s_asinpi.c += -fno-builtin-asinpil CFLAGS-s_atan.c += -fno-builtin-atanl CFLAGS-w_atan2.c += -fno-builtin-atan2l CFLAGS-w_atanh.c += -fno-builtin-atanhl @@ -1455,6 +1459,7 @@ CFLAGS-w_acosh.c += -fno-builtin-acoshf32x -fno-builtin-acoshf64 CFLAGS-s_acospi.c += -fno-builtin-acospif32x -fno-builtin-acospif64 CFLAGS-w_asin.c += -fno-builtin-asinf32x -fno-builtin-asinf64 CFLAGS-s_asinh.c += -fno-builtin-asinhf32x -fno-builtin-asinhf64 +CFLAGS-s_asinpi.c += -fno-builtin-asinpif32x -fno-builtin-asinpif64 CFLAGS-s_atan.c += -fno-builtin-atanf32x -fno-builtin-atanf64 CFLAGS-w_atan2.c += -fno-builtin-atan2f32x -fno-builtin-atan2f64 CFLAGS-w_atanh.c += -fno-builtin-atanhf32x -fno-builtin-atanhf64 @@ -1583,6 +1588,7 @@ CFLAGS-w_acoshf.c += -fno-builtin-acoshf32 CFLAGS-s_acospif.c += -fno-builtin-acospif32 CFLAGS-w_asinf.c += -fno-builtin-asinf32 CFLAGS-s_asinhf.c += -fno-builtin-asinhf32 +CFLAGS-s_asinpif.c += -fno-builtin-asinpif32 CFLAGS-s_atanf.c += -fno-builtin-atanf32 CFLAGS-w_atan2f.c += -fno-builtin-atan2f32 CFLAGS-w_atanhf.c += -fno-builtin-atanhf32 diff --git a/math/Versions b/math/Versions index d59eb57a22..a7b79b0d6c 100644 --- a/math/Versions +++ b/math/Versions @@ -656,11 +656,13 @@ libm { GLIBC_2.41 { # Functions not involving _Float64x or _Float128, for all configurations. acospi; acospif; acospil; acospif32; acospif64; acospif32x; + asinpi; asinpif; asinpil; asinpif32; asinpif64; asinpif32x; cospi; cospif; cospil; cospif32; cospif64; cospif32x; sinpi; sinpif; sinpil; sinpif32; sinpif64; sinpif32x; tanpi; tanpif; tanpil; tanpif32; tanpif64; tanpif32x; # Functions involving _Float64x or _Float128, for some configurations. acospif64x; acospif128; + asinpif64x; asinpif128; cospif64x; cospif128; sinpif64x; sinpif128; tanpif64x; tanpif128; diff --git a/math/auto-libm-test-in b/math/auto-libm-test-in index 2abe9e5566..809df5ce09 100644 --- a/math/auto-libm-test-in +++ b/math/auto-libm-test-in @@ -464,6 +464,57 @@ asinh -min_subnorm asinh max asinh -max +asinpi 0 +asinpi -0 +asinpi 0.5 +asinpi -0.5 +asinpi 1.0 +asinpi -1.0 +asinpi 0.75 +asinpi 0x0.ffffffp0 +asinpi -0x0.ffffffp0 +asinpi 0x0.ffffffff8p0 +asinpi -0x0.ffffffff8p0 +asinpi 0x0.ffffffffffffp0 +asinpi -0x0.ffffffffffffp0 +asinpi 0x0.fffffffffffff8p0 +asinpi -0x0.fffffffffffff8p0 +asinpi 0x0.ffffffffffffffffp0 +asinpi -0x0.ffffffffffffffffp0 +asinpi 0x0.ffffffffffffffffffffffffffcp0 +asinpi -0x0.ffffffffffffffffffffffffffcp0 +asinpi 0x0.ffffffffffffffffffffffffffff8p0 +asinpi -0x0.ffffffffffffffffffffffffffff8p0 +asinpi 0x1p-5 +asinpi 0x1p-10 +asinpi 0x1p-15 +asinpi 0x1p-20 +asinpi 0x1p-25 +asinpi 0x1p-30 +asinpi 0x1p-35 +asinpi 0x1p-40 +asinpi 0x1p-45 +asinpi 0x1p-50 +asinpi 0x1p-55 +asinpi 0x1p-60 +asinpi 0x1p-100 +asinpi 0x1p-600 +asinpi 0x1p-10000 +asinpi -0x2.18915cp-4 +asinpi -0x3.746774p-4 +asinpi -0x3.1c54d10e5c844p-4 +asinpi 0xf.c9675fa6fe69f12p-4 +asinpi -0xa.fc5afp-4 +asinpi 0xd.805e5p-4 +asinpi -0x2.1a02dcp-4 +asinpi -0x8.1c120ac3e495p-4 +asinpi -0xb.36dacp-4 +asinpi 0x1.f6041ffe89d7dp-4 +asinpi min +asinpi -min +asinpi min_subnorm +asinpi -min_subnorm + atan 0 atan -0 atan max diff --git a/math/auto-libm-test-out-asinpi b/math/auto-libm-test-out-asinpi new file mode 100644 index 0000000000..bf02b297f9 --- /dev/null +++ b/math/auto-libm-test-out-asinpi @@ -0,0 +1,2442 @@ +asinpi 0 += asinpi downward binary32 0x0p+0 : 0x0p+0 : inexact-ok += asinpi tonearest binary32 0x0p+0 : 0x0p+0 : inexact-ok += asinpi towardzero binary32 0x0p+0 : 0x0p+0 : inexact-ok += asinpi upward binary32 0x0p+0 : 0x0p+0 : inexact-ok += asinpi downward binary64 0x0p+0 : 0x0p+0 : inexact-ok += asinpi tonearest binary64 0x0p+0 : 0x0p+0 : inexact-ok += asinpi towardzero binary64 0x0p+0 : 0x0p+0 : inexact-ok += asinpi upward binary64 0x0p+0 : 0x0p+0 : inexact-ok += asinpi downward intel96 0x0p+0 : 0x0p+0 : inexact-ok += asinpi tonearest intel96 0x0p+0 : 0x0p+0 : inexact-ok += asinpi towardzero intel96 0x0p+0 : 0x0p+0 : inexact-ok += asinpi upward intel96 0x0p+0 : 0x0p+0 : inexact-ok += asinpi downward m68k96 0x0p+0 : 0x0p+0 : inexact-ok += asinpi tonearest m68k96 0x0p+0 : 0x0p+0 : inexact-ok += asinpi towardzero m68k96 0x0p+0 : 0x0p+0 : inexact-ok += asinpi upward m68k96 0x0p+0 : 0x0p+0 : inexact-ok += asinpi downward binary128 0x0p+0 : 0x0p+0 : inexact-ok += asinpi tonearest binary128 0x0p+0 : 0x0p+0 : inexact-ok += asinpi towardzero binary128 0x0p+0 : 0x0p+0 : inexact-ok += asinpi upward binary128 0x0p+0 : 0x0p+0 : inexact-ok += asinpi downward ibm128 0x0p+0 : 0x0p+0 : inexact-ok += asinpi tonearest ibm128 0x0p+0 : 0x0p+0 : inexact-ok += asinpi towardzero ibm128 0x0p+0 : 0x0p+0 : inexact-ok += asinpi upward ibm128 0x0p+0 : 0x0p+0 : inexact-ok +asinpi -0 += asinpi downward binary32 -0x0p+0 : -0x0p+0 : inexact-ok += asinpi tonearest binary32 -0x0p+0 : -0x0p+0 : inexact-ok += asinpi towardzero binary32 -0x0p+0 : -0x0p+0 : inexact-ok += asinpi upward binary32 -0x0p+0 : -0x0p+0 : inexact-ok += asinpi downward binary64 -0x0p+0 : -0x0p+0 : inexact-ok += asinpi tonearest binary64 -0x0p+0 : -0x0p+0 : inexact-ok += asinpi towardzero binary64 -0x0p+0 : -0x0p+0 : inexact-ok += asinpi upward binary64 -0x0p+0 : -0x0p+0 : inexact-ok += asinpi downward intel96 -0x0p+0 : -0x0p+0 : inexact-ok += asinpi tonearest intel96 -0x0p+0 : -0x0p+0 : inexact-ok += asinpi towardzero intel96 -0x0p+0 : -0x0p+0 : inexact-ok += asinpi upward intel96 -0x0p+0 : -0x0p+0 : inexact-ok += asinpi downward m68k96 -0x0p+0 : -0x0p+0 : inexact-ok += asinpi tonearest m68k96 -0x0p+0 : -0x0p+0 : inexact-ok += asinpi towardzero m68k96 -0x0p+0 : -0x0p+0 : inexact-ok += asinpi upward m68k96 -0x0p+0 : -0x0p+0 : inexact-ok += asinpi downward binary128 -0x0p+0 : -0x0p+0 : inexact-ok += asinpi tonearest binary128 -0x0p+0 : -0x0p+0 : inexact-ok += asinpi towardzero binary128 -0x0p+0 : -0x0p+0 : inexact-ok += asinpi upward binary128 -0x0p+0 : -0x0p+0 : inexact-ok += asinpi downward ibm128 -0x0p+0 : -0x0p+0 : inexact-ok += asinpi tonearest ibm128 -0x0p+0 : -0x0p+0 : inexact-ok += asinpi towardzero ibm128 -0x0p+0 : -0x0p+0 : inexact-ok += asinpi upward ibm128 -0x0p+0 : -0x0p+0 : inexact-ok +asinpi 0.5 += asinpi downward binary32 0x8p-4 : 0x2.aaaaa8p-4 : inexact-ok += asinpi tonearest binary32 0x8p-4 : 0x2.aaaaacp-4 : inexact-ok += asinpi towardzero binary32 0x8p-4 : 0x2.aaaaa8p-4 : inexact-ok += asinpi upward binary32 0x8p-4 : 0x2.aaaaacp-4 : inexact-ok += asinpi downward binary64 0x8p-4 : 0x2.aaaaaaaaaaaaap-4 : inexact-ok += asinpi tonearest binary64 0x8p-4 : 0x2.aaaaaaaaaaaaap-4 : inexact-ok += asinpi towardzero binary64 0x8p-4 : 0x2.aaaaaaaaaaaaap-4 : inexact-ok += asinpi upward binary64 0x8p-4 : 0x2.aaaaaaaaaaaacp-4 : inexact-ok += asinpi downward intel96 0x8p-4 : 0x2.aaaaaaaaaaaaaaa8p-4 : inexact-ok += asinpi tonearest intel96 0x8p-4 : 0x2.aaaaaaaaaaaaaaacp-4 : inexact-ok += asinpi towardzero intel96 0x8p-4 : 0x2.aaaaaaaaaaaaaaa8p-4 : inexact-ok += asinpi upward intel96 0x8p-4 : 0x2.aaaaaaaaaaaaaaacp-4 : inexact-ok += asinpi downward m68k96 0x8p-4 : 0x2.aaaaaaaaaaaaaaa8p-4 : inexact-ok += asinpi tonearest m68k96 0x8p-4 : 0x2.aaaaaaaaaaaaaaacp-4 : inexact-ok += asinpi towardzero m68k96 0x8p-4 : 0x2.aaaaaaaaaaaaaaa8p-4 : inexact-ok += asinpi upward m68k96 0x8p-4 : 0x2.aaaaaaaaaaaaaaacp-4 : inexact-ok += asinpi downward binary128 0x8p-4 : 0x2.aaaaaaaaaaaaaaaaaaaaaaaaaaaap-4 : inexact-ok += asinpi tonearest binary128 0x8p-4 : 0x2.aaaaaaaaaaaaaaaaaaaaaaaaaaaap-4 : inexact-ok += asinpi towardzero binary128 0x8p-4 : 0x2.aaaaaaaaaaaaaaaaaaaaaaaaaaaap-4 : inexact-ok += asinpi upward binary128 0x8p-4 : 0x2.aaaaaaaaaaaaaaaaaaaaaaaaaaacp-4 : inexact-ok += asinpi downward ibm128 0x8p-4 : 0x2.aaaaaaaaaaaaaaaaaaaaaaaaaap-4 : inexact-ok += asinpi tonearest ibm128 0x8p-4 : 0x2.aaaaaaaaaaaaaaaaaaaaaaaaabp-4 : inexact-ok += asinpi towardzero ibm128 0x8p-4 : 0x2.aaaaaaaaaaaaaaaaaaaaaaaaaap-4 : inexact-ok += asinpi upward ibm128 0x8p-4 : 0x2.aaaaaaaaaaaaaaaaaaaaaaaaabp-4 : inexact-ok +asinpi -0.5 += asinpi downward binary32 -0x8p-4 : -0x2.aaaaacp-4 : inexact-ok += asinpi tonearest binary32 -0x8p-4 : -0x2.aaaaacp-4 : inexact-ok += asinpi towardzero binary32 -0x8p-4 : -0x2.aaaaa8p-4 : inexact-ok += asinpi upward binary32 -0x8p-4 : -0x2.aaaaa8p-4 : inexact-ok += asinpi downward binary64 -0x8p-4 : -0x2.aaaaaaaaaaaacp-4 : inexact-ok += asinpi tonearest binary64 -0x8p-4 : -0x2.aaaaaaaaaaaaap-4 : inexact-ok += asinpi towardzero binary64 -0x8p-4 : -0x2.aaaaaaaaaaaaap-4 : inexact-ok += asinpi upward binary64 -0x8p-4 : -0x2.aaaaaaaaaaaaap-4 : inexact-ok += asinpi downward intel96 -0x8p-4 : -0x2.aaaaaaaaaaaaaaacp-4 : inexact |
