This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Fix dbl-64 atan in non-default rounding modes (bug 18197) [committed]
- From: Joseph Myers <joseph at codesourcery dot com>
- To: <libc-alpha at sourceware dot org>
- Date: Wed, 8 Apr 2015 17:14:55 +0000
- Subject: Fix dbl-64 atan in non-default rounding modes (bug 18197) [committed]
- Authentication-results: sourceware.org; auth=none
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. Committed.
(auto-libm-test-out changes omitted below.)
2015-04-08 Joseph Myers <joseph@codesourcery.com>
[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.
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/sysdeps/ieee754/dbl-64/s_atan.c b/sysdeps/ieee754/dbl-64/s_atan.c
index 7b598f1..5035ae8 100644
--- a/sysdeps/ieee754/dbl-64/s_atan.c
+++ b/sysdeps/ieee754/dbl-64/s_atan.c
@@ -41,6 +41,7 @@
#include "MathLib.h"
#include "uatan.tbl"
#include "atnat.h"
+#include <fenv.h>
#include <float.h>
#include <math.h>
#include <math_private.h>
@@ -81,6 +82,7 @@ atan (double x)
return x + x;
/* Regular values of x, including denormals +-0 and +-INF */
+ SET_RESTORE_ROUND (FE_TONEAREST);
u = (x < 0) ? -x : x;
if (u < C)
{
--
Joseph S. Myers
joseph@codesourcery.com