aboutsummaryrefslogtreecommitdiff
path: root/math
diff options
context:
space:
mode:
authorJoseph Myers <josmyers@redhat.com>2024-12-12 20:57:44 +0000
committerJoseph Myers <josmyers@redhat.com>2024-12-12 20:57:44 +0000
commit3374de90386f1814cec58567248d43a4632b16f0 (patch)
tree5217374d884b2809abf39ef8270cf7e7057c7fa5 /math
parent3ac826b0200e6972de81fe0469c1f8868c0e52ce (diff)
downloadglibc-3374de90386f1814cec58567248d43a4632b16f0.tar.xz
glibc-3374de90386f1814cec58567248d43a4632b16f0.zip
Implement C23 atan2pi
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.
Diffstat (limited to 'math')
-rw-r--r--math/Makefile6
-rw-r--r--math/Versions2
-rw-r--r--math/auto-libm-test-in86
-rw-r--r--math/auto-libm-test-out-atan2pi14205
-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-atan2pi.inc211
-rw-r--r--math/s_atan2pi_template.c41
-rw-r--r--math/test-tgmath.c12
-rw-r--r--math/tgmath.h2
11 files changed, 14568 insertions, 1 deletions
diff --git a/math/Makefile b/math/Makefile
index 56cb5d1eed..36fe5c2bd4 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -96,6 +96,7 @@ gen-libm-calls = \
k_casinhF \
s_acospiF \
s_asinpiF \
+ s_atan2piF \
s_atanpiF \
s_cacosF \
s_cacoshF \
@@ -627,6 +628,7 @@ libm-test-funcs-auto = \
asinpi \
atan \
atan2 \
+ atan2pi \
atanh \
atanpi \
cabs \
@@ -938,6 +940,7 @@ tgmath3-macros = \
asinpi \
atan \
atan2 \
+ atan2pi \
atanh \
atanpi \
carg \
@@ -1323,6 +1326,7 @@ 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-s_atan2pi.c += -fno-builtin-atan2pil
CFLAGS-w_atanh.c += -fno-builtin-atanhl
CFLAGS-s_atanpi.c += -fno-builtin-atanpil
CFLAGS-s_cabs.c += -fno-builtin-cabsl
@@ -1467,6 +1471,7 @@ 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-s_atan2pi.c += -fno-builtin-atan2pif32x -fno-builtin-atan2pif64
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
@@ -1597,6 +1602,7 @@ 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-s_atan2pif.c += -fno-builtin-atan2pif32
CFLAGS-w_atanhf.c += -fno-builtin-atanhf32
CFLAGS-s_atanpif.c += -fno-builtin-atanpif32
CFLAGS-s_cabsf.c += -fno-builtin-cabsf32
diff --git a/math/Versions b/math/Versions
index 3abf90da82..e4fbef3f6d 100644
--- a/math/Versions
+++ b/math/Versions
@@ -657,6 +657,7 @@ libm {
# Functions not involving _Float64x or _Float128, for all configurations.
acospi; acospif; acospil; acospif32; acospif64; acospif32x;
asinpi; asinpif; asinpil; asinpif32; asinpif64; asinpif32x;
+ atan2pi; atan2pif; atan2pil; atan2pif32; atan2pif64; atan2pif32x;
atanpi; atanpif; atanpil; atanpif32; atanpif64; atanpif32x;
cospi; cospif; cospil; cospif32; cospif64; cospif32x;
sinpi; sinpif; sinpil; sinpif32; sinpif64; sinpif32x;
@@ -664,6 +665,7 @@ libm {
# Functions involving _Float64x or _Float128, for some configurations.
acospif64x; acospif128;
asinpif64x; asinpif128;
+ atan2pif64x; atan2pif128;
atanpif64x; atanpif128;
cospif64x; cospif128;
sinpif64x; sinpif128;
diff --git a/math/auto-libm-test-in b/math/auto-libm-test-in
index ebea756d50..0b7f0d3251 100644
--- a/math/auto-libm-test-in
+++ b/math/auto-libm-test-in
@@ -656,6 +656,92 @@ atan2 -min -1
atan2 min_subnorm -1
atan2 -min_subnorm -1
+atan2pi 0 1
+atan2pi -0 1
+atan2pi 0 0
+atan2pi -0 0
+atan2pi 0 -1
+atan2pi -0 -1
+atan2pi 0 -0
+atan2pi -0 -0
+atan2pi 1 0
+atan2pi 1 -0
+atan2pi -1 0
+atan2pi -1 -0
+atan2pi max max
+atan2pi max -max
+atan2pi -max max
+atan2pi -max -max
+atan2pi max min
+atan2pi -max -min
+atan2pi -max min
+atan2pi max -min
+atan2pi max min_subnorm
+atan2pi -max -min_subnorm
+atan2pi -max min_subnorm
+atan2pi max -min_subnorm
+atan2pi 0.75 1
+atan2pi -0.75 1.0
+atan2pi 0.75 -1.0
+atan2pi -0.75 -1.0
+atan2pi 0.390625 .00029
+atan2pi 1.390625 0.9296875
+atan2pi -0.00756827042671106339 -.001792735857538728036
+atan2pi 0x1.00000000000001p0 0x1.00000000000001p0
+atan2pi 0x4.c3841p-4 0x2.f2f308p+0
+atan2pi -0xe.cf143p-40 0xd.3de7ap-36
+atan2pi 0x5.576cf8p-4 0x2.21e65p+0
+atan2pi -0x4.29411p-4 0x1.f4755cp+0
+atan2pi -0xa.b4101p+20 -0xf.9c4c8p-4
+atan2pi 0x4.251bb8p-4 0x7.40ac68p+0
+atan2pi 0x1.47239ep+68 0xa.3ac3cp+68
+atan2pi -0x6.b0794p-4 0x3.8ff10cp+0
+atan2pi -0x7.15e7af0a1780cp-724 0xf.fffffp+124
+atan2pi 0x3.f16f1p+0 -0x1.546056p+0
+atan2pi -0x1.9e657cp-24 0x7.40bb4p-52
+atan2pi -0x1.f9cf48p+49 0x1.f60598p+51
+atan2pi 0x1.bcab29da0e947p-54 0x1.bc41f4d2294b8p-54
+atan2pi 0x1.a11891ec004d4p-348 0x1.814830510be26p-348
+atan2pi 0x1.b836ed678be29p-588 0x1.b7be6f5a03a8cp-588
+atan2pi 0x1.a83f842ef3f73p-633 0x1.a799d8a6677ep-633
+atan2pi 0x1.41df5aa214612c7e019fa6ade88p-13316 0x5.e53b26a270a29eb9f77ef8ef7af8p-13316
+atan2pi min min
+atan2pi min -min
+atan2pi -min min
+atan2pi -min -min
+atan2pi min_subnorm min_subnorm
+atan2pi min_subnorm -min_subnorm
+atan2pi -min_subnorm min_subnorm
+atan2pi -min_subnorm -min_subnorm
+atan2pi min min_subnorm
+atan2pi min -min_subnorm
+atan2pi -min min_subnorm
+atan2pi -min -min_subnorm
+atan2pi min_subnorm min
+atan2pi min_subnorm -min
+atan2pi -min_subnorm min
+atan2pi -min_subnorm -min
+atan2pi 1 -max
+atan2pi -1 -max
+atan2pi min -max
+atan2pi -min -max
+atan2pi min_subnorm -max
+atan2pi -min_subnorm -max
+atan2pi 1 max
+atan2pi -1 max
+atan2pi min max
+atan2pi -min max
+atan2pi min_subnorm max
+atan2pi -min_subnorm max
+atan2pi min 1
+atan2pi -min 1
+atan2pi min_subnorm 1
+atan2pi -min_subnorm 1
+atan2pi min -1
+atan2pi -min -1
+atan2pi min_subnorm -1
+atan2pi -min_subnorm -1
+
atanh 0
atanh -0
atanh 0.75
diff --git a/math/auto-libm-test-out-atan2pi b/math/auto-libm-test-out-atan2pi
new file mode 100644
index 0000000000..b5c743d07a
--- /dev/null
+++ b/math/auto-libm-test-out-atan2pi
@@ -0,0 +1,14205 @@
+atan2pi 0 1
+= atan2pi downward binary32 0x0p+0 0x1p+0 : 0x0p+0 : inexact-ok
+= atan2pi tonearest binary32 0x0p+0 0x1p+0 : 0x0p+0 : inexact-ok
+= atan2pi towardzero binary32 0x0p+0 0x1p+0 : 0x0p+0 : inexact-ok
+= atan2pi upward binary32 0x0p+0 0x1p+0 : 0x0p+0 : inexact-ok
+= atan2pi downward binary64 0x0p+0 0x1p+0 : 0x0p+0 : inexact-ok
+= atan2pi tonearest binary64 0x0p+0 0x1p+0 : 0x0p+0 : inexact-ok
+= atan2pi towardzero binary64 0x0p+0 0x1p+0 : 0x0p+0 : inexact-ok
+= atan2pi upward binary64 0x0p+0 0x1p+0 : 0x0p+0 : inexact-ok
+= atan2pi downward intel96 0x0p+0 0x1p+0 : 0x0p+0 : inexact-ok
+= atan2pi tonearest intel96 0x0p+0 0x1p+0 : 0x0p+0 : inexact-ok
+= atan2pi towardzero intel96 0x0p+0 0x1p+0 : 0x0p+0 : inexact-ok
+= atan2pi upward intel96 0x0p+0 0x1p+0 : 0x0p+0 : inexact-ok
+= atan2pi downward m68k96 0x0p+0 0x1p+0 : 0x0p+0 : inexact-ok
+= atan2pi tonearest m68k96 0x0p+0 0x1p+0 : 0x0p+0 : inexact-ok
+= atan2pi towardzero m68k96 0x0p+0 0x1p+0 : 0x0p+0 : inexact-ok
+= atan2pi upward m68k96 0x0p+0 0x1p+0 : 0x0p+0 : inexact-ok
+= atan2pi downward binary128 0x0p+0 0x1p+0 : 0x0p+0 : inexact-ok
+= atan2pi tonearest binary128 0x0p+0 0x1p+0 : 0x0p+0 : inexact-ok
+= atan2pi towardzero binary128 0x0p+0 0x1p+0 : 0x0p+0 : inexact-ok
+= atan2pi upward binary128 0x0p+0 0x1p+0 : 0x0p+0 : inexact-ok
+= atan2pi downward ibm128 0x0p+0 0x1p+0 : 0x0p+0 : inexact-ok
+= atan2pi tonearest ibm128 0x0p+0 0x1p+0 : 0x0p+0 : inexact-ok
+= atan2pi towardzero ibm128 0x0p+0 0x1p+0 : 0x0p+0 : inexact-ok
+= atan2pi upward ibm128 0x0p+0 0x1p+0 : 0x0p+0 : inexact-ok
+atan2pi -0 1
+= atan2pi downward binary32 -0x0p+0 0x1p+0 : -0x0p+0 : inexact-ok
+= atan2pi tonearest binary32 -0x0p+0 0x1p+0 : -0x0p+0 : inexact-ok
+= atan2pi towardzero binary32 -0x0p+0 0x1p+0 : -0x0p+0 : inexact-ok
+= atan2pi upward binary32 -0x0p+0 0x1p+0 : -0x0p+0 : inexact-ok
+= atan2pi downward binary64 -0x0p+0 0x1p+0 : -0x0p+0 : inexact-ok
+= atan2pi tonearest binary64 -0x0p+0 0x1p+0 : -0x0p+0 : inexact-ok
+= atan2pi towardzero binary64 -0x0p+0 0x1p+0 : -0x0p+0 : inexact-ok
+= atan2pi upward binary64 -0x0p+0 0x1p+0 : -0x0p+0 : inexact-ok
+= atan2pi downward intel96 -0x0p+0 0x1p+0 : -0x0p+0 : inexact-ok
+= atan2pi tonearest intel96 -0x0p+0 0x1p+0 : -0x0p+0 : inexact-ok
+= atan2pi towardzero intel96 -0x0p+0 0x1p+0 : -0x0p+0 : inexact-ok
+= atan2pi upward intel96 -0x0p+0 0x1p+0 : -0x0p+0 : inexact-ok
+= atan2pi downward m68k96 -0x0p+0 0x1p+0 : -0x0p+0 : inexact-ok
+= atan2pi tonearest m68k96 -0x0p+0 0x1p+0 : -0x0p+0 : inexact-ok
+= atan2pi towardzero m68k96 -0x0p+0 0x1p+0 : -0x0p+0 : inexact-ok
+= atan2pi upward m68k96 -0x0p+0 0x1p+0 : -0x0p+0 : inexact-ok
+= atan2pi downward binary128 -0x0p+0 0x1p+0 : -0x0p+0 : inexact-ok
+= atan2pi tonearest binary128 -0x0p+0 0x1p+0 : -0x0p+0 : inexact-ok
+= atan2pi towardzero binary128 -0x0p+0 0x1p+0 : -0x0p+0 : inexact-ok
+= atan2pi upward binary128 -0x0p+0 0x1p+0 : -0x0p+0 : inexact-ok
+= atan2pi downward ibm128 -0x0p+0 0x1p+0 : -0x0p+0 : inexact-ok
+= atan2pi tonearest ibm128 -0x0p+0 0x1p+0 : -0x0p+0 : inexact-ok
+= atan2pi towardzero ibm128 -0x0p+0 0x1p+0 : -0x0p+0 : inexact-ok
+= atan2pi upward ibm128 -0x0p+0 0x1p+0 : -0x0p+0 : inexact-ok
+atan2pi 0 0
+= atan2pi downward binary32 0x0p+0 0x0p+0 : 0x0p+0 : inexact-ok
+= atan2pi tonearest binary32 0x0p+0 0x0p+0 : 0x0p+0 : inexact-ok
+= atan2pi towardzero binary32 0x0p+0 0x0p+0 : 0x0p+0 : inexact-ok
+= atan2pi upward binary32 0x0p+0 0x0p+0 : 0x0p+0 : inexact-ok
+= atan2pi downward binary64 0x0p+0 0x0p+0 : 0x0p+0 : inexact-ok
+= atan2pi tonearest binary64 0x0p+0 0x0p+0 : 0x0p+0 : inexact-ok
+= atan2pi towardzero binary64 0x0p+0 0x0p+0 : 0x0p+0 : inexact-ok
+= atan2pi upward binary64 0x0p+0 0x0p+0 : 0x0p+0 : inexact-ok
+= atan2pi downward intel96 0x0p+0 0x0p+0 : 0x0p+0 : inexact-ok
+= atan2pi tonearest intel96 0x0p+0 0x0p+0 : 0x0p+0 : inexact-ok
+= atan2pi towardzero intel96 0x0p+0 0x0p+0 : 0x0p+0 : inexact-ok
+= atan2pi upward intel96 0x0p+0 0x0p+0 : 0x0p+0 : inexact-ok
+= atan2pi downward m68k96 0x0p+0 0x0p+0 : 0x0p+0 : inexact-ok
+= atan2pi tonearest m68k96 0x0p+0 0x0p+0 : 0x0p+0 : inexact-ok
+= atan2pi towardzero m68k96 0x0p+0 0x0p+0 : 0x0p+0 : inexact-ok
+= atan2pi upward m68k96 0x0p+0 0x0p+0 : 0x0p+0 : inexact-ok
+= atan2pi downward binary128 0x0p+0 0x0p+0 : 0x0p+0 : inexact-ok
+= atan2pi tonearest binary128 0x0p+0 0x0p+0 : 0x0p+0 : inexact-ok
+= atan2pi towardzero binary128 0x0p+0 0x0p+0 : 0x0p+0 : inexact-ok
+= atan2pi upward binary128 0x0p+0 0x0p+0 : 0x0p+0 : inexact-ok
+= atan2pi downward ibm128 0x0p+0 0x0p+0 : 0x0p+0 : inexact-ok
+= atan2pi tonearest ibm128 0x0p+0 0x0p+0 : 0x0p+0 : inexact-ok
+= atan2pi towardzero ibm128 0x0p+0 0x0p+0 : 0x0p+0 : inexact-ok
+= atan2pi upward ibm128 0x0p+0 0x0p+0 : 0x0p+0 : inexact-ok
+atan2pi -0 0
+= atan2pi downward binary32 -0x0p+0 0x0p+0 : -0x0p+0 : inexact-ok
+= atan2pi tonearest binary32 -0x0p+0 0x0p+0 : -0x0p+0 : inexact-ok
+= atan2pi towardzero binary32 -0x0p+0 0x0p+0 : -0x0p+0 : inexact-ok
+= atan2pi upward binary32 -0x0p+0 0x0p+0 : -0x0p+0 : inexact-ok
+= atan2pi downward binary64 -0x0p+0 0x0p+0 : -0x0p+0 : inexact-ok
+= atan2pi tonearest binary64 -0x0p+0 0x0p+0 : -0x0p+0 : inexact-ok
+= atan2pi towardzero binary64 -0x0p+0 0x0p+0 : -0x0p+0 : inexact-ok
+= atan2pi upward binary64 -0x0p+0 0x0p+0 : -0x0p+0 : inexact-ok
+= atan2pi downward intel96 -0x0p+0 0x0p+0 : -0x0p+0 : inexact-ok
+= atan2pi tonearest intel96 -0x0p+0 0x0p+0 : -0x0p+0 : inexact-ok
+= atan2pi towardzero intel96 -0x0p+0 0x0p+0 : -0x0p+0 : inexact-ok
+= atan2pi upward intel96 -0x0p+0 0x0p+0 : -0x0p+0 : inexact-ok
+= atan2pi downward m68k96 -0x0p+0 0x0p+0 : -0x0p+0 : inexact-ok
+= atan2pi tonearest m68k96 -0x0p+0 0x0p+0 : -0x0p+0 : inexact-ok
+= atan2pi towardzero m68k96 -0x0p+0 0x0p+0 : -0x0p+0 : inexact-ok
+= atan2pi upward m68k96 -0x0p+0 0x0p+0 : -0x0p+0 : inexact-ok
+= atan2pi downward binary128 -0x0p+0 0x0p+0 : -0x0p+0 : inexact-ok
+= atan2pi tonearest binary128 -0x0p+0 0x0p+0 : -0x0p+0 : inexact-ok
+= atan2pi towardzero binary128 -0x0p+0 0x0p+0 : -0x0p+0 : inexact-ok
+= atan2pi upward binary128 -0x0p+0 0x0p+0 : -0x0p+0 : inexact-ok
+= atan2pi downward ibm128 -0x0p+0 0x0p+0 : -0x0p+0 : inexact-ok
+= atan2pi tonearest ibm128 -0x0p+0 0x0p+0 : -0x0p+0 : inexact-ok
+= atan2pi towardzero ibm128 -0x0p+0 0x0p+0 : -0x0p+0 : inexact-ok
+= atan2pi upward ibm128 -0x0p+0 0x0p+0 : -0x0p+0 : inexact-ok
+atan2pi 0 -1
+= atan2pi downward binary32 0x0p+0 -0x1p+0 : 0x1p+0 : inexact-ok
+= atan2pi tonearest binary32 0x0p+0 -0x1p+0 : 0x1p+0 : inexact-ok
+= atan2pi towardzero binary32 0x0p+0 -0x1p+0 : 0x1p+0 : inexact-ok
+= atan2pi upward binary32 0x0p+0 -0x1p+0 : 0x1p+0 : inexact-ok
+= atan2pi downward binary64 0x0p+0 -0x1p+0 : 0x1p+0 : inexact-ok
+= atan2pi tonearest binary64 0x0p+0 -0x1p+0 : 0x1p+0 : inexact-ok
+= atan2pi towardzero binary64 0x0p+0 -0x1p+0 : 0x1p+0 : inexact-ok
+= atan2pi upward binary64 0x0p+0 -0x1p+0 : 0x1p+0 : inexact-ok
+= atan2pi downward intel96 0x0p+0 -0x1p+0 : 0x1p+0 : inexact-ok
+= atan2pi tonearest intel96 0x0p+0 -0x1p+0 : 0x1p+0 : inexact-ok
+= atan2pi towardzero intel96 0x0p+0 -0x1p+0 : 0x1p+0 : inexact-ok
+= atan2pi upward intel96 0x0p+0 -0x1p+0 : 0x1p+0 : inexact-ok
+= atan2pi downward m68k96 0x0p+0 -0x1p+0 : 0x1p+0 : inexact-ok
+= atan2pi tonearest m68k96 0x0p+0 -0x1p+0 : 0x1p+0 : inexact-ok
+= atan2pi towardzero m68k96 0x0p+0 -0x1p+0 : 0x1p+0 : inexact-ok
+= atan2pi upward m68k96 0x0p+0 -0x1p+0 : 0x1p+0 : inexact-ok
+= atan2pi downward binary128 0x0p+0 -0x1p+0 : 0x1p+0 : inexact-ok
+= atan2pi tonearest binary128 0x0p+0 -0x1p+0 : 0x1p+0 : inexact-ok
+= atan2pi towardzero binary128 0x0p+0 -0x1p+0 : 0x1p+0 : inexact-ok
+= atan2pi upward binary128 0x0p+0 -0x1p+0 : 0x1p+0 : inexact-ok
+= atan2pi downward ibm128 0x0p+0 -0x1p+0 : 0x1p+0 : inexact-ok
+= atan2pi tonearest ibm128 0x0p+0 -0x1p+0 : 0x1p+0 : inexact-ok
+= atan2pi towardzero ibm128 0x0p+0 -0x1p+0 : 0x1p+0 : inexact-ok
+= atan2pi upward ibm128 0x0p+0 -0x1p+0 : 0x1p+0 : inexact-ok
+atan2pi -0 -1
+= atan2pi downward binary32 -0x0p+0 -0x1p+0 : -0x1p+0 : inexact-ok
+= atan2pi tonearest binary32 -0x0p+0 -0x1p+0 : -0x1p+0 : inexact-ok
+= atan2pi towardzero binary32 -0x0p+0 -0x1p+0 : -0x1p+0 : inexact-ok
+= atan2pi upward binary32 -0x0p+0 -0x1p+0 : -0x1p+0 : inexact-ok
+= atan2pi downward binary64 -0x0p+0 -0x1p+0 : -0x1p+0 : inexact-ok
+= atan2pi tonearest binary64 -0x0p+0 -0x1p+0 : -0x1p+0 : inexact-ok
+= atan2pi towardzero binary64 -0x0p+0 -0x1p+0 : -0x1p+0 : inexact-ok
+= atan2pi upward binary64 -0x0p+0 -0x1p+0 : -0x1p+0 : inexact-ok
+= atan2pi downward intel96 -0x0p+0 -0x1p+0 : -0x1p+0 : inexact-ok
+= atan2pi tonearest intel96 -0x0p+0 -0x1p+0 : -0x1p+0 : inexact-ok
+= atan2pi towardzero intel96 -0x0p+0 -0x1p+0 : -0x1p+0 : inexact-ok
+= atan2pi upward intel96 -0x0p+0 -0x1p+0 : -0x1p+0 : inexact-ok
+= atan2pi downward m68k96 -0x0p+0 -0x1p+0 : -0x1p+0 : inexact-ok
+= atan2pi tonearest m68k96 -0x0p+0 -0x1p+0 : -0x1p+0 : inexact-ok
+= atan2pi towardzero m68k96 -0x0p+0 -0x1p+0 : -0x1p+0 : inexact-ok
+= atan2pi upward m68k96 -0x0p+0 -0x1p+0 : -0x1p+0 : inexact-ok
+= atan2pi downward binary128 -0x0p+0 -0x1p+0 : -0x1p+0 : inexact-ok
+= atan2pi tonearest binary128 -0x0p+0 -0x1p+0 : -0x1p+0 : inexact-ok
+= atan2pi towardzero binary128 -0x0p+0 -0x1p+0 : -0x1p+0 : inexact-ok
+= atan2pi upward binary128 -0x0p+0 -0x1p+0 : -0x1p+0 : inexact-ok
+= atan2pi downward ibm128 -0x0p+0 -0x1p+0 : -0x1p+0 : inexact-ok
+= atan2pi tonearest ibm128 -0x0p+0 -0x1p+0 : -0x1p+0 : inexact-ok
+= atan2pi towardzero ibm128 -0x0p+0 -0x1p+0 : -0x1p+0 : inexact-ok
+= atan2pi upward ibm128 -0x0p+0 -0x1p+0 : -0x1p+0 : inexact-ok
+atan2pi 0 -0
+= atan2pi downward binary32 0x0p+0 -0x0p+0 : 0x1p+0 : inexact-ok
+= atan2pi tonearest binary32 0x0p+0 -0x0p+0 : 0x1p+0 : inexact-ok
+= atan2pi towardzero binary32 0x0p+0 -0x0p+0 : 0x1p+0 : inexact-ok
+= atan2pi upward binary32 0x0p+0 -0x0p+0 : 0x1p+0 : inexact-ok
+= atan2pi downward binary64 0x0p+0 -0x0p+0 : 0x1p+0 : inexact-ok
+= atan2pi tonearest binary64 0x0p+0 -0x0p+0 : 0x1p+0 : inexact-ok
+= atan2pi towardzero binary64 0x0p+0 -0x0p+0 : 0x1p+0 : inexact-ok
+= atan2pi upward binary64 0x0p+0 -0x0p+0 : 0x1p+0 : inexact-ok
+= atan2pi downward intel96 0x0p+0 -0x0p+0 : 0x1p+0 : inexact-ok
+= atan2pi tonearest intel96 0x0p+0 -0x0p+0 : 0x1p+0 : inexact-ok
+= atan2pi towardzero intel96 0x0p+0 -0x0p+0 : 0x1p+0 : inexact-ok
+= atan2pi upward intel96 0x0p+0 -0x0p+0 : 0x1p+0 : inexact-ok
+= atan2pi downward m68k96 0x0p+0 -0x0p+0 : 0x1p+0 : inexact-ok
+= atan2pi tonearest m68k96 0x0p+0 -0x0p+0 : 0x1p+0 : inexact-ok
+= atan2pi towardzero m68k96 0x0p+0 -0x0p+0 : 0x1p+0 : inexact-ok
+= atan2pi upward m68k96 0x0p+0 -0x0p+0 : 0x1p+0 : inexact-ok
+= atan2pi downward binary128 0x0p+0 -0x0p+0 : 0x1p+0 : inexact-ok
+= atan2pi tonearest binary128 0x0p+0 -0x0p+0 : 0x1p+0 : inexact-ok
+= atan2pi towardzero binary128 0x0p+0 -0x0p+0 : 0x1p+0 : inexact-ok
+= atan2pi upward binary128 0x0p+0 -0x0p+0 : 0x1p+0 : inexact-ok
+= atan2pi downward ibm128 0x0p+0 -0x0p+0 : 0x1p+0 : inexact-ok
+= atan2pi tonearest ibm128 0x0p+0 -0x0p+0 : 0x1p+0 : inexact-ok
+= atan2pi towardzero ibm128 0x0p+0 -0x0p+0 : 0x1p+0 : inexact-ok
+= atan2pi upward ibm128 0x0p+0 -0x0p+0 : 0x1p+0 : inexact-ok
+atan2pi -0 -0
+= atan2pi downward binary32 -0x0p+0 -0x0p+0 : -0x1p+0 : inexact-ok
+= atan2pi tonearest binary32 -0x0p+0 -0x0p+0 : -0x1p+0 : inexact-ok
+= atan2pi towardzero binary32 -0x0p+0 -0x0p+0 : -0x1p+0 : inexact-ok
+= atan2pi upward binary32 -0x0p+0 -0x0p+0 : -0x1p+0 : inexact-ok
+= atan2pi downward binary64 -0x0p+0 -0x0p+0 : -0x1p+0 : inexact-ok
+= atan2pi tonearest binary64 -0x0p+0 -0x0p+0 : -0x1p+0 : inexact-ok
+= atan2pi towardzero binary64 -0x0p+0 -0x0p+0 : -0x1p+0 : inexact-ok
+= atan2pi upward binary64 -0x0p+0 -0x0p+0 : -0x1p+0 : inexact-ok
+= atan2pi downward intel96 -0x0p+0 -0x0p+0 : -0x1p+0 : inexact-ok
+= atan2pi tonearest intel96 -0x0p+0 -0x0p+0 : -0x1p+0 : inexact-ok
+= atan2pi towardzero intel96 -0x0p+0 -0x0p+0 : -0x1p+0 : inexact-ok
+= atan2pi upward intel96 -0x0p+0 -0x0p+0 : -0x1p+0 : inexact-ok
+= atan2pi downward m68k96 -0x0p+0 -0x0p+0 : -0x1p+0 : inexact-ok
+= atan2pi tonearest m68k96 -0x0p+0 -0x0p+0 : -0x1p+0 : inexact-ok
+= atan2pi towardzero m68k96 -0x0p+0 -0x0p+0 : -0x1p+0 : inexact-ok
+= atan2pi upward m68k96 -0x0p+0 -0x0p+0 : -0x1p+0 : inexact-ok
+= atan2pi downward binary128 -0x0p+0 -0x0p+0 : -0x1p+0 : inexact-ok
+= atan2pi tonearest binary128 -0x0p+0 -0x0p+0 : -0x1p+0 : inexact-ok
+= atan2pi towardzero binary128 -0x0p+0 -0x0p+0 : -0x1p+0 : inexact-ok
+= atan2pi upward binary128 -0x0p+0 -0x0p+0 : -0x1p+0 : inexact-ok
+= atan2pi downward ibm128 -0x0p+0 -0x0p+0 : -0x1p+0 : inexact-ok
+= atan2pi tonearest ibm128 -0x0p+0 -0x0p+0 : -0x1p+0 : inexact-ok
+= atan2pi towardzero ibm128 -0x0p+0 -0x0p+0 : -0x1p+0 : inexact-ok
+= atan2pi upward ibm128 -0x0p+0 -0x0p+0 : -0x1p+0 : inexact-ok
+atan2pi 1 0
+= atan2pi downward binary32 0x1p+0 0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi tonearest binary32 0x1p+0 0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi towardzero binary32 0x1p+0 0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi upward binary32 0x1p+0 0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi downward binary64 0x1p+0 0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi tonearest binary64 0x1p+0 0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi towardzero binary64 0x1p+0 0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi upward binary64 0x1p+0 0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi downward intel96 0x1p+0 0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi tonearest intel96 0x1p+0 0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi towardzero intel96 0x1p+0 0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi upward intel96 0x1p+0 0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi downward m68k96 0x1p+0 0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi tonearest m68k96 0x1p+0 0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi towardzero m68k96 0x1p+0 0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi upward m68k96 0x1p+0 0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi downward binary128 0x1p+0 0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi tonearest binary128 0x1p+0 0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi towardzero binary128 0x1p+0 0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi upward binary128 0x1p+0 0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi downward ibm128 0x1p+0 0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi tonearest ibm128 0x1p+0 0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi towardzero ibm128 0x1p+0 0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi upward ibm128 0x1p+0 0x0p+0 : 0x8p-4 : inexact-ok
+atan2pi 1 -0
+= atan2pi downward binary32 0x1p+0 -0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi tonearest binary32 0x1p+0 -0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi towardzero binary32 0x1p+0 -0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi upward binary32 0x1p+0 -0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi downward binary64 0x1p+0 -0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi tonearest binary64 0x1p+0 -0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi towardzero binary64 0x1p+0 -0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi upward binary64 0x1p+0 -0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi downward intel96 0x1p+0 -0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi tonearest intel96 0x1p+0 -0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi towardzero intel96 0x1p+0 -0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi upward intel96 0x1p+0 -0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi downward m68k96 0x1p+0 -0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi tonearest m68k96 0x1p+0 -0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi towardzero m68k96 0x1p+0 -0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi upward m68k96 0x1p+0 -0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi downward binary128 0x1p+0 -0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi tonearest binary128 0x1p+0 -0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi towardzero binary128 0x1p+0 -0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi upward binary128 0x1p+0 -0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi downward ibm128 0x1p+0 -0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi tonearest ibm128 0x1p+0 -0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi towardzero ibm128 0x1p+0 -0x0p+0 : 0x8p-4 : inexact-ok
+= atan2pi upward ibm128 0x1p+0 -0x0p+0 : 0x8p-4 : inexact-ok
+atan2pi -1 0
+= atan2pi downward binary32 -0x1p+0 0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi tonearest binary32 -0x1p+0 0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi towardzero binary32 -0x1p+0 0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi upward binary32 -0x1p+0 0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi downward binary64 -0x1p+0 0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi tonearest binary64 -0x1p+0 0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi towardzero binary64 -0x1p+0 0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi upward binary64 -0x1p+0 0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi downward intel96 -0x1p+0 0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi tonearest intel96 -0x1p+0 0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi towardzero intel96 -0x1p+0 0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi upward intel96 -0x1p+0 0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi downward m68k96 -0x1p+0 0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi tonearest m68k96 -0x1p+0 0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi towardzero m68k96 -0x1p+0 0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi upward m68k96 -0x1p+0 0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi downward binary128 -0x1p+0 0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi tonearest binary128 -0x1p+0 0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi towardzero binary128 -0x1p+0 0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi upward binary128 -0x1p+0 0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi downward ibm128 -0x1p+0 0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi tonearest ibm128 -0x1p+0 0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi towardzero ibm128 -0x1p+0 0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi upward ibm128 -0x1p+0 0x0p+0 : -0x8p-4 : inexact-ok
+atan2pi -1 -0
+= atan2pi downward binary32 -0x1p+0 -0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi tonearest binary32 -0x1p+0 -0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi towardzero binary32 -0x1p+0 -0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi upward binary32 -0x1p+0 -0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi downward binary64 -0x1p+0 -0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi tonearest binary64 -0x1p+0 -0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi towardzero binary64 -0x1p+0 -0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi upward binary64 -0x1p+0 -0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi downward intel96 -0x1p+0 -0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi tonearest intel96 -0x1p+0 -0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi towardzero intel96 -0x1p+0 -0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi upward intel96 -0x1p+0 -0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi downward m68k96 -0x1p+0 -0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi tonearest m68k96 -0x1p+0 -0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi towardzero m68k96 -0x1p+0 -0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi upward m68k96 -0x1p+0 -0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi downward binary128 -0x1p+0 -0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi tonearest binary128 -0x1p+0 -0x0p+0 : -0x8p-4 : inexact-ok
+= atan2pi towardzero binary128 -0x1p+0 -0x0p+0 : -0x8p-4 : inexact-ok