aboutsummaryrefslogtreecommitdiff
path: root/math
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2015-04-08 17:14:12 +0000
committerJoseph Myers <joseph@codesourcery.com>2015-04-08 17:14:12 +0000
commitae63c7ebedcaa57017df4cb8ff0494a4705321ee (patch)
tree4f2b413430bffe2a9c5354c5bd4e731106d7b832 /math
parentd5856d06c3ef62907f2865c502ada4baf3c9efa1 (diff)
downloadglibc-ae63c7ebedcaa57017df4cb8ff0494a4705321ee.zip
glibc-ae63c7ebedcaa57017df4cb8ff0494a4705321ee.tar.gz
glibc-ae63c7ebedcaa57017df4cb8ff0494a4705321ee.tar.bz2
Fix dbl-64 atan in non-default rounding modes (bug 18197).
The dbl-64 implementation of atan does computations that expect to run in round-to-nearest mode, and in other modes the errors can accumulate to more than the maximum accepted 9ulp. This patch makes it use FE_TONEAREST internally, similar to other functions with such issues. Tested for x86_64 and x86; no ulps updates needed. [BZ #18197] * sysdeps/ieee754/dbl-64/s_atan.c: Include <fenv.h>. (atan): Set FE_TONEAREST mode for internal computations. * math/auto-libm-test-in: Add more tests of atan. * math/auto-libm-test-out: Regenerated.
Diffstat (limited to 'math')
-rw-r--r--math/auto-libm-test-in2
-rw-r--r--math/auto-libm-test-out50
2 files changed, 52 insertions, 0 deletions
diff --git a/math/auto-libm-test-in b/math/auto-libm-test-in
index 939f6ea..d0026d5 100644
--- a/math/auto-libm-test-in
+++ b/math/auto-libm-test-in
@@ -240,6 +240,8 @@ atan 1e6
atan 0x1p-100
atan 0x1p-600
atan 0x1p-10000
+atan -0x3.b02d84p-4
+atan -0x3.3fb708p-4
atan min
atan -min
atan min_subnorm
diff --git a/math/auto-libm-test-out b/math/auto-libm-test-out
index 68435ab..3550f33 100644
--- a/math/auto-libm-test-out
+++ b/math/auto-libm-test-out
@@ -7877,6 +7877,56 @@ atan 0x1p-10000
= atan tonearest ldbl-128 0x1p-10000L : 0x1p-10000L : inexact-ok
= atan towardzero ldbl-128 0x1p-10000L : 0xf.fffffffffffffffffffffffffff8p-10004L : inexact-ok
= atan upward ldbl-128 0x1p-10000L : 0x1p-10000L : inexact-ok
+atan -0x3.b02d84p-4
+= atan downward flt-32 -0x3.b02d84p-4f : -0x3.9ff7e4p-4f : inexact-ok
+= atan tonearest flt-32 -0x3.b02d84p-4f : -0x3.9ff7ep-4f : inexact-ok
+= atan towardzero flt-32 -0x3.b02d84p-4f : -0x3.9ff7ep-4f : inexact-ok
+= atan upward flt-32 -0x3.b02d84p-4f : -0x3.9ff7ep-4f : inexact-ok
+= atan downward dbl-64 -0x3.b02d84p-4 : -0x3.9ff7e1f81370cp-4 : inexact-ok
+= atan tonearest dbl-64 -0x3.b02d84p-4 : -0x3.9ff7e1f81370cp-4 : inexact-ok
+= atan towardzero dbl-64 -0x3.b02d84p-4 : -0x3.9ff7e1f81370ap-4 : inexact-ok
+= atan upward dbl-64 -0x3.b02d84p-4 : -0x3.9ff7e1f81370ap-4 : inexact-ok
+= atan downward ldbl-96-intel -0x3.b02d84p-4L : -0x3.9ff7e1f81370b934p-4L : inexact-ok
+= atan tonearest ldbl-96-intel -0x3.b02d84p-4L : -0x3.9ff7e1f81370b93p-4L : inexact-ok
+= atan towardzero ldbl-96-intel -0x3.b02d84p-4L : -0x3.9ff7e1f81370b93p-4L : inexact-ok
+= atan upward ldbl-96-intel -0x3.b02d84p-4L : -0x3.9ff7e1f81370b93p-4L : inexact-ok
+= atan downward ldbl-96-m68k -0x3.b02d84p-4L : -0x3.9ff7e1f81370b934p-4L : inexact-ok
+= atan tonearest ldbl-96-m68k -0x3.b02d84p-4L : -0x3.9ff7e1f81370b93p-4L : inexact-ok
+= atan towardzero ldbl-96-m68k -0x3.b02d84p-4L : -0x3.9ff7e1f81370b93p-4L : inexact-ok
+= atan upward ldbl-96-m68k -0x3.b02d84p-4L : -0x3.9ff7e1f81370b93p-4L : inexact-ok
+= atan downward ldbl-128 -0x3.b02d84p-4L : -0x3.9ff7e1f81370b93195e0357d0b5ap-4L : inexact-ok
+= atan tonearest ldbl-128 -0x3.b02d84p-4L : -0x3.9ff7e1f81370b93195e0357d0b5ap-4L : inexact-ok
+= atan towardzero ldbl-128 -0x3.b02d84p-4L : -0x3.9ff7e1f81370b93195e0357d0b58p-4L : inexact-ok
+= atan upward ldbl-128 -0x3.b02d84p-4L : -0x3.9ff7e1f81370b93195e0357d0b58p-4L : inexact-ok
+= atan downward ldbl-128ibm -0x3.b02d84p-4L : -0x3.9ff7e1f81370b93195e0357d0cp-4L : inexact-ok
+= atan tonearest ldbl-128ibm -0x3.b02d84p-4L : -0x3.9ff7e1f81370b93195e0357d0bp-4L : inexact-ok
+= atan towardzero ldbl-128ibm -0x3.b02d84p-4L : -0x3.9ff7e1f81370b93195e0357d0bp-4L : inexact-ok
+= atan upward ldbl-128ibm -0x3.b02d84p-4L : -0x3.9ff7e1f81370b93195e0357d0bp-4L : inexact-ok
+atan -0x3.3fb708p-4
+= atan downward flt-32 -0x3.3fb708p-4f : -0x3.348f0cp-4f : inexact-ok
+= atan tonearest flt-32 -0x3.3fb708p-4f : -0x3.348f08p-4f : inexact-ok
+= atan towardzero flt-32 -0x3.3fb708p-4f : -0x3.348f08p-4f : inexact-ok
+= atan upward flt-32 -0x3.3fb708p-4f : -0x3.348f08p-4f : inexact-ok
+= atan downward dbl-64 -0x3.3fb708p-4 : -0x3.348f092072332p-4 : inexact-ok
+= atan tonearest dbl-64 -0x3.3fb708p-4 : -0x3.348f092072332p-4 : inexact-ok
+= atan towardzero dbl-64 -0x3.3fb708p-4 : -0x3.348f09207233p-4 : inexact-ok
+= atan upward dbl-64 -0x3.3fb708p-4 : -0x3.348f09207233p-4 : inexact-ok
+= atan downward ldbl-96-intel -0x3.3fb708p-4L : -0x3.348f092072331fdcp-4L : inexact-ok
+= atan tonearest ldbl-96-intel -0x3.3fb708p-4L : -0x3.348f092072331fd8p-4L : inexact-ok
+= atan towardzero ldbl-96-intel -0x3.3fb708p-4L : -0x3.348f092072331fd8p-4L : inexact-ok
+= atan upward ldbl-96-intel -0x3.3fb708p-4L : -0x3.348f092072331fd8p-4L : inexact-ok
+= atan downward ldbl-96-m68k -0x3.3fb708p-4L : -0x3.348f092072331fdcp-4L : inexact-ok
+= atan tonearest ldbl-96-m68k -0x3.3fb708p-4L : -0x3.348f092072331fd8p-4L : inexact-ok
+= atan towardzero ldbl-96-m68k -0x3.3fb708p-4L : -0x3.348f092072331fd8p-4L : inexact-ok
+= atan upward ldbl-96-m68k -0x3.3fb708p-4L : -0x3.348f092072331fd8p-4L : inexact-ok
+= atan downward ldbl-128 -0x3.3fb708p-4L : -0x3.348f092072331fd8ca0cbff348d8p-4L : inexact-ok
+= atan tonearest ldbl-128 -0x3.3fb708p-4L : -0x3.348f092072331fd8ca0cbff348d6p-4L : inexact-ok
+= atan towardzero ldbl-128 -0x3.3fb708p-4L : -0x3.348f092072331fd8ca0cbff348d6p-4L : inexact-ok
+= atan upward ldbl-128 -0x3.3fb708p-4L : -0x3.348f092072331fd8ca0cbff348d6p-4L : inexact-ok
+= atan downward ldbl-128ibm -0x3.3fb708p-4L : -0x3.348f092072331fd8ca0cbff349p-4L : inexact-ok
+= atan tonearest ldbl-128ibm -0x3.3fb708p-4L : -0x3.348f092072331fd8ca0cbff349p-4L : inexact-ok
+= atan towardzero ldbl-128ibm -0x3.3fb708p-4L : -0x3.348f092072331fd8ca0cbff348p-4L : inexact-ok
+= atan upward ldbl-128ibm -0x3.3fb708p-4L : -0x3.348f092072331fd8ca0cbff348p-4L : inexact-ok
atan min
= atan downward flt-32 0x4p-128f : 0x3.fffff8p-128f : inexact-ok underflow-ok errno-erange-ok
= atan tonearest flt-32 0x4p-128f : 0x4p-128f : inexact-ok underflow-ok errno-erange-ok