diff options
51 files changed, 1832 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, 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 |
