aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS2
-rw-r--r--manual/math.texi14
-rw-r--r--math/Makefile6
-rw-r--r--math/Versions2
-rw-r--r--math/auto-libm-test-in40
-rw-r--r--math/auto-libm-test-out-atanpi1379
-rw-r--r--math/bits/mathcalls.h2
-rw-r--r--math/gen-auto-libm-tests.c1
-rwxr-xr-xmath/gen-tgmath-tests.py1
-rw-r--r--math/libm-test-atanpi.inc49
-rw-r--r--math/s_atanpi_template.c39
-rw-r--r--math/test-tgmath.c12
-rw-r--r--math/tgmath.h2
-rw-r--r--sysdeps/i386/i686/fpu/multiarch/libm-test-ulps24
-rw-r--r--sysdeps/ieee754/ldbl-128ibm-compat/Versions1
-rw-r--r--sysdeps/ieee754/ldbl-opt/Makefile2
-rw-r--r--sysdeps/ieee754/ldbl-opt/nldbl-atanpi.c8
-rw-r--r--sysdeps/mach/hurd/i386/libm.abilist8
-rw-r--r--sysdeps/mach/hurd/x86_64/libm.abilist8
-rw-r--r--sysdeps/powerpc/nofpu/Makefile1
-rw-r--r--sysdeps/unix/sysv/linux/aarch64/libm.abilist8
-rw-r--r--sysdeps/unix/sysv/linux/alpha/libm.abilist8
-rw-r--r--sysdeps/unix/sysv/linux/arc/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/arm/be/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/arm/le/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/csky/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/hppa/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/i386/libm.abilist8
-rw-r--r--sysdeps/unix/sysv/linux/loongarch/lp64/libm.abilist8
-rw-r--r--sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/microblaze/be/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/microblaze/le/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips32/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips64/libm.abilist8
-rw-r--r--sysdeps/unix/sysv/linux/or1k/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist9
-rw-r--r--sysdeps/unix/sysv/linux/riscv/rv32/libm.abilist8
-rw-r--r--sysdeps/unix/sysv/linux/riscv/rv64/libm.abilist8
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist8
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist8
-rw-r--r--sysdeps/unix/sysv/linux/sh/be/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/sh/le/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist8
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist8
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/64/libm.abilist8
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist8
-rw-r--r--sysdeps/x86_64/fpu/libm-test-ulps24
51 files changed, 1832 insertions, 2 deletions
diff --git a/NEWS b/NEWS
index 4d180a37d2..2f0d2c89cc 100644
--- a/NEWS
+++ b/NEWS
@@ -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, asinpi, cospi, sinpi, tanpi.
+ - Trigonometric functions: acospi, asinpi, atanpi, 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 32c5c057e0..e148fd83ba 100644
--- a/manual/math.texi
+++ b/manual/math.texi
@@ -476,6 +476,20 @@ domain, @code{acospi} signals a domain error.
The @code{acospi} functions are from TS 18661-4:2015.
@end deftypefun
+@deftypefun double atanpi (double @var{x})
+@deftypefunx float atanpif (float @var{x})
+@deftypefunx {long double} atanpil (long double @var{x})
+@deftypefunx _FloatN atanpifN (_Float@var{N} @var{x})
+@deftypefunx _FloatNx atanpifNx (_Float@var{N}x @var{x})
+@standards{TS 18661-4:2015, math.h}
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+These functions compute the arctangent of @var{x}, divided by pi. The
+result is in the interval between @code{-0.5} and @code{0.5}
+(inclusive).
+
+The @code{atanpi} functions are from TS 18661-4:2015.
+@end deftypefun
+
@cindex inverse complex trigonometric functions
@w{ISO C99} defines complex versions of the inverse trig functions.
diff --git a/math/Makefile b/math/Makefile
index 87ff79b269..6f0d2108b2 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -95,6 +95,7 @@ gen-libm-calls = \
k_casinhF \
s_acospiF \
s_asinpiF \
+ s_atanpiF \
s_cacosF \
s_cacoshF \
s_canonicalizeF \
@@ -626,6 +627,7 @@ libm-test-funcs-auto = \
atan \
atan2 \
atanh \
+ atanpi \
cabs \
cacos \
cacosh \
@@ -936,6 +938,7 @@ tgmath3-macros = \
atan \
atan2 \
atanh \
+ atanpi \
carg \
cbrt \
ceil \
@@ -1320,6 +1323,7 @@ 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
+CFLAGS-s_atanpi.c += -fno-builtin-atanpil
CFLAGS-s_cabs.c += -fno-builtin-cabsl
CFLAGS-s_cacos.c += -fno-builtin-cacosl
CFLAGS-s_cacosh.c += -fno-builtin-cacoshl
@@ -1463,6 +1467,7 @@ 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
+CFLAGS-s_atanpi.c += -fno-builtin-atanpif32x -fno-builtin-atanpif64
CFLAGS-s_cabs.c += -fno-builtin-cabsf32x -fno-builtin-cabsf64
CFLAGS-s_cacos.c += -fno-builtin-cacosf32x -fno-builtin-cacosf64
CFLAGS-s_cacosh.c += -fno-builtin-cacoshf32x -fno-builtin-cacoshf64
@@ -1592,6 +1597,7 @@ 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
+CFLAGS-s_atanpif.c += -fno-builtin-atanpif32
CFLAGS-s_cabsf.c += -fno-builtin-cabsf32
CFLAGS-s_cacosf.c += -fno-builtin-cacosf32
CFLAGS-s_cacoshf.c += -fno-builtin-cacoshf32
diff --git a/math/Versions b/math/Versions
index a7b79b0d6c..3abf90da82 100644
--- a/math/Versions
+++ b/math/Versions
@@ -657,12 +657,14 @@ libm {
# Functions not involving _Float64x or _Float128, for all configurations.
acospi; acospif; acospil; acospif32; acospif64; acospif32x;
asinpi; asinpif; asinpil; asinpif32; asinpif64; asinpif32x;
+ atanpi; atanpif; atanpil; atanpif32; atanpif64; atanpif32x;
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;
+ atanpif64x; atanpif128;
cospif64x; cospif128;
sinpif64x; sinpif128;
tanpif64x; tanpif128;
diff --git a/math/auto-libm-test-in b/math/auto-libm-test-in
index 809df5ce09..ebea756d50 100644
--- a/math/auto-libm-test-in
+++ b/math/auto-libm-test-in
@@ -748,6 +748,46 @@ atanh -min
atanh min_subnorm
atanh -min_subnorm
+atanpi 0
+atanpi -0
+atanpi max
+atanpi -max
+atanpi 1
+atanpi -1
+atanpi 0.75
+atanpi 0x1p-5
+atanpi 0x1p-10
+atanpi 0x1p-15
+atanpi 0x1p-20
+atanpi 0x1p-25
+atanpi 0x1p-30
+atanpi 0x1p-35
+atanpi 0x1p-40
+atanpi 0x1p-45
+atanpi 0x1p-50
+atanpi 0x1p-55
+atanpi 0x1p-60
+atanpi 2.5
+atanpi 10
+atanpi 1e6
+atanpi 0x1p31
+atanpi 0x1p-100
+atanpi 0x1p-600
+atanpi 0x1p-10000
+atanpi -0x3.b02d84p-4
+atanpi -0x3.3fb708p-4
+atanpi -0x2.3249ap+0
+atanpi -0x1.363f46p+0
+atanpi -0x1.ad4c0ap+0
+atanpi -0x3.eb8e18p+0
+atanpi 0x3.53c188p+0
+atanpi -0x1.58c83p+0
+atanpi 0x1.626772p-1
+atanpi min
+atanpi -min
+atanpi min_subnorm
+atanpi -min_subnorm
+
# cabs (x,y) == cabs (y,x).
cabs 0.75 12.390625
# cabs (x,y) == cabs (-x,y).
diff --git a/math/auto-libm-test-out-atanpi b/math/auto-libm-test-out-atanpi
new file mode 100644
index 0000000000..b6e8abdd09
--- /dev/null
+++ b/math/auto-libm-test-out-atanpi
@@ -0,0 +1,1379 @@
+atanpi 0
+= atanpi downward binary32 0x0p+0 : 0x0p+0 : inexact-ok
+= atanpi tonearest binary32 0x0p+0 : 0x0p+0 : inexact-ok
+= atanpi towardzero binary32 0x0p+0 : 0x0p+0 : inexact-ok
+= atanpi upward binary32 0x0p+0 : 0x0p+0 : inexact-ok
+= atanpi downward binary64 0x0p+0 : 0x0p+0 : inexact-ok
+= atanpi tonearest binary64 0x0p+0 : 0x0p+0 : inexact-ok
+= atanpi towardzero binary64 0x0p+0 : 0x0p+0 : inexact-ok
+= atanpi upward binary64 0x0p+0 : 0x0p+0 : inexact-ok
+= atanpi downward intel96 0x0p+0 : 0x0p+0 : inexact-ok
+= atanpi tonearest intel96 0x0p+0 : 0x0p+0 : inexact-ok
+= atanpi towardzero intel96 0x0p+0 : 0x0p+0 : inexact-ok
+= atanpi upward intel96 0x0p+0 : 0x0p+0 : inexact-ok
+= atanpi downward m68k96 0x0p+0 : 0x0p+0 : inexact-ok
+= atanpi tonearest m68k96 0x0p+0 : 0x0p+0 : inexact-ok
+= atanpi towardzero m68k96 0x0p+0 : 0x0p+0 : inexact-ok
+= atanpi upward m68k96 0x0p+0 : 0x0p+0 : inexact-ok
+= atanpi downward binary128 0x0p+0 : 0x0p+0 : inexact-ok
+= atanpi tonearest binary128 0x0p+0 : 0x0p+0 : inexact-ok
+= atanpi towardzero binary128 0x0p+0 : 0x0p+0 : inexact-ok
+= atanpi upward binary128 0x0p+0 : 0x0p+0 : inexact-ok
+= atanpi downward ibm128 0x0p+0 : 0x0p+0 : inexact-ok
+= atanpi tonearest ibm128 0x0p+0 : 0x0p+0 : inexact-ok
+= atanpi towardzero ibm128 0x0p+0 : 0x0p+0 : inexact-ok
+= atanpi upward ibm128 0x0p+0 : 0x0p+0 : inexact-ok
+atanpi -0
+= atanpi downward binary32 -0x0p+0 : -0x0p+0 : inexact-ok
+= atanpi tonearest binary32 -0x0p+0 : -0x0p+0 : inexact-ok
+= atanpi towardzero binary32 -0x0p+0 : -0x0p+0 : inexact-ok
+= atanpi upward binary32 -0x0p+0 : -0x0p+0 : inexact-ok
+= atanpi downward binary64 -0x0p+0 : -0x0p+0 : inexact-ok
+= atanpi tonearest binary64 -0x0p+0 : -0x0p+0 : inexact-ok
+= atanpi towardzero binary64 -0x0p+0 : -0x0p+0 : inexact-ok
+= atanpi upward binary64 -0x0p+0 : -0x0p+0 : inexact-ok
+= atanpi downward intel96 -0x0p+0 : -0x0p+0 : inexact-ok
+= atanpi tonearest intel96 -0x0p+0 : -0x0p+0 : inexact-ok
+= atanpi towardzero intel96 -0x0p+0 : -0x0p+0 : inexact-ok
+= atanpi upward intel96 -0x0p+0 : -0x0p+0 : inexact-ok
+= atanpi downward m68k96 -0x0p+0 : -0x0p+0 : inexact-ok
+= atanpi tonearest m68k96 -0x0p+0 : -0x0p+0 : inexact-ok
+= atanpi towardzero m68k96 -0x0p+0 : -0x0p+0 : inexact-ok
+= atanpi upward m68k96 -0x0p+0 : -0x0p+0 : inexact-ok
+= atanpi downward binary128 -0x0p+0 : -0x0p+0 : inexact-ok
+= atanpi tonearest binary128 -0x0p+0 : -0x0p+0 : inexact-ok
+= atanpi towardzero binary128 -0x0p+0 : -0x0p+0 : inexact-ok
+= atanpi upward binary128 -0x0p+0 : -0x0p+0 : inexact-ok
+= atanpi downward ibm128 -0x0p+0 : -0x0p+0 : inexact-ok
+= atanpi tonearest ibm128 -0x0p+0 : -0x0p+0 : inexact-ok
+= atanpi towardzero ibm128 -0x0p+0 : -0x0p+0 : inexact-ok
+= atanpi upward ibm128 -0x0p+0 : -0x0p+0 : inexact-ok
+atanpi max
+= atanpi downward binary32 0xf.fffffp+124 : 0x7.fffff8p-4 : inexact-ok
+= atanpi tonearest binary32 0xf.fffffp+124 : 0x8p-4 : inexact-ok
+= atanpi towardzero binary32 0xf.fffffp+124 : 0x7.fffff8p-4 : inexact-ok
+= atanpi upward binary32 0xf.fffffp+124 : 0x8p-4 : inexact-ok
+= atanpi downward binary64 0xf.fffffp+124 : 0x7.ffffffffffffcp-4 : inexact-ok
+= atanpi tonearest binary64 0xf.fffffp+124 : 0x8p-4 : inexact-ok
+= atanpi towardzero binary64 0xf.fffffp+124 : 0x7.ffffffffffffcp-4 : inexact-ok
+= atanpi upward binary64 0xf.fffffp+124 : 0x8p-4 : inexact-ok
+= atanpi downward intel96 0xf.fffffp+124 : 0x7.fffffffffffffff8p-4 : inexact-ok
+= atanpi tonearest intel96 0xf.fffffp+124 : 0x8p-4 : inexact-ok
+= atanpi towardzero intel96 0xf.fffffp+124 : 0x7.fffffffffffffff8p-4 : inexact-ok
+= atanpi upward intel96 0xf.fffffp+124 : 0x8p-4 : inexact-ok
+= atanpi downward m68k96 0xf.fffffp+124 : 0x7.fffffffffffffff8p-4 : inexact-ok
+= atanpi tonearest m68k96 0xf.fffffp+124 : 0x8p-4 : inexact-ok
+= atanpi towardzero m68k96 0xf.fffffp+124 : 0x7.fffffffffffffff8p-4 : inexact-ok
+= atanpi upward m68k96 0xf.fffffp+124 : 0x8p-4 : inexact-ok
+= atanpi downward binary128 0xf.fffffp+124 : 0x7.fffffffffffffffffffffffffffcp-4 : inexact-ok
+= atanpi tonearest binary128 0xf.fffffp+124 : 0x8p-4 : inexact-ok
+= atanpi towardzero binary128 0xf.fffffp+124 : 0x7.fffffffffffffffffffffffffffcp-4 : inexact-ok
+= atanpi upward binary128 0xf.fffffp+124 : 0x8p-4 : inexact-ok
+= atanpi downward ibm128 0xf.fffffp+124 : 0x7.fffffffffffffffffffffffffep-4 : inexact-ok
+= atanpi tonearest ibm128 0xf.fffffp+124 : 0x8p-4 : inexact-ok
+= atanpi towardzero ibm128 0xf.fffffp+124 : 0x7.fffffffffffffffffffffffffep-4 : inexact-ok
+= atanpi upward ibm128 0xf.fffffp+124 : 0x8p-4 : inexact-ok
+= atanpi downward binary64 0xf.ffffffffffff8p+1020 : 0x7.ffffffffffffcp-4 : inexact-ok
+= atanpi tonearest binary64 0xf.ffffffffffff8p+1020 : 0x8p-4 : inexact-ok
+= atanpi towardzero binary64 0xf.ffffffffffff8p+1020 : 0x7.ffffffffffffcp-4 : inexact-ok
+= atanpi upward binary64 0xf.ffffffffffff8p+1020 : 0x8p-4 : inexact-ok
+= atanpi downward intel96 0xf.ffffffffffff8p+1020 : 0x7.fffffffffffffff8p-4 : inexact-ok
+= atanpi tonearest intel96 0xf.ffffffffffff8p+1020 : 0x8p-4 : inexact-ok
+= atanpi towardzero intel96 0xf.ffffffffffff8p+1020 : 0x7.fffffffffffffff8p-4 : inexact-ok
+= atanpi upward intel96 0xf.ffffffffffff8p+1020 : 0x8p-4 : inexact-ok
+= atanpi downward m68k96 0xf.ffffffffffff8p+1020 : 0x7.fffffffffffffff8p-4 : inexact-ok
+= atanpi tonearest m68k96 0xf.ffffffffffff8p+1020 : 0x8p-4 : inexact-ok
+= atanpi towardzero m68k96 0xf.ffffffffffff8p+1020 : 0x7.fffffffffffffff8p-4 : inexact-ok
+= atanpi upward m68k96 0xf.ffffffffffff8p+1020 : 0x8p-4 : inexact-ok
+= atanpi downward binary128 0xf.ffffffffffff8p+1020 : 0x7.fffffffffffffffffffffffffffcp-4 : inexact-ok
+= atanpi tonearest binary128 0xf.ffffffffffff8p+1020 : 0x8p-4 : inexact-ok
+= atanpi towardzero binary128 0xf.ffffffffffff8p+1020 : 0x7.fffffffffffffffffffffffffffcp-4 : inexact-ok
+= atanpi upward binary128 0xf.ffffffffffff8p+1020 : 0x8p-4 : inexact-ok
+= atanpi downward ibm128 0xf.ffffffffffff8p+1020 : 0x7.fffffffffffffffffffffffffep-4 : inexact-ok
+= atanpi tonearest ibm128 0xf.ffffffffffff8p+1020 : 0x8p-4 : inexact-ok
+= atanpi towardzero ibm128 0xf.ffffffffffff8p+1020 : 0x7.fffffffffffffffffffffffffep-4 : inexact-ok
+= atanpi upward ibm128 0xf.ffffffffffff8p+1020 : 0x8p-4 : inexact-ok
+= atanpi downward intel96 0xf.fffffffffffffffp+16380 : 0x7.fffffffffffffff8p-4 : inexact-ok
+= atanpi tonearest intel96 0xf.fffffffffffffffp+16380 : 0x8p-4 : inexact-ok
+= atanpi towardzero intel96 0xf.fffffffffffffffp+16380 : 0x7.fffffffffffffff8p-4 : inexact-ok
+= atanpi upward intel96 0xf.fffffffffffffffp+16380 : 0x8p-4 : inexact-ok
+= atanpi downward m68k96 0xf.fffffffffffffffp+16380 : 0x7.fffffffffffffff8p-4 : inexact-ok
+= atanpi tonearest m68k96 0xf.fffffffffffffffp+16380 : 0x8p-4 : inexact-ok
+= atanpi towardzero m68k96 0xf.fffffffffffffffp+16380 : 0x7.fffffffffffffff8p-4 : inexact-ok
+= atanpi upward m68k96 0xf.fffffffffffffffp+16380 : 0x8p-4 : inexact-ok
+= atanpi downward binary128 0xf.fffffffffffffffp+16380 : 0x7.fffffffffffffffffffffffffffcp-4 : inexact-ok
+= atanpi tonearest binary128 0xf.fffffffffffffffp+16380 : 0x8p-4 : inexact-ok
+= atanpi towardzero binary128 0xf.fffffffffffffffp+16380 : 0x7.ffffffffffffffff