aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/ieee754
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2015-05-14 23:51:09 +0000
committerJoseph Myers <joseph@codesourcery.com>2015-05-14 23:51:09 +0000
commit9a71f1fcf53615c00b5f9e5da4bba92bccb0efb4 (patch)
tree803585f46a9049a90164009e560b8f25e262faa0 /sysdeps/ieee754
parent0b7a5f920163d03806d7c5d9d1c83b16942c9496 (diff)
downloadglibc-9a71f1fcf53615c00b5f9e5da4bba92bccb0efb4.tar
glibc-9a71f1fcf53615c00b5f9e5da4bba92bccb0efb4.tar.gz
glibc-9a71f1fcf53615c00b5f9e5da4bba92bccb0efb4.tar.bz2
glibc-9a71f1fcf53615c00b5f9e5da4bba92bccb0efb4.zip
Fix atanf spurious underflows (bug 18196).
The sysdeps/ieee754/flt-32 version of atanf produces spurious underflow exceptions for some large arguments, because of computations that compute x^-4. This patch fixes this by adjusting the threshold for large arguments (for which +/- pi/2 can just be returned, the correct result being roughly +/- pi/2 - 1/x) from 2^34 to 2^25. Tested for x86_64 and x86. [BZ #18196] * sysdeps/ieee754/flt-32/s_atanf.c (__atanf): Use 2^25 not 2^34 as threshold for large arguments. * math/auto-libm-test-in: Add another test of atan. * math/auto-libm-test-out: Regenerated.
Diffstat (limited to 'sysdeps/ieee754')
-rw-r--r--sysdeps/ieee754/flt-32/s_atanf.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/sysdeps/ieee754/flt-32/s_atanf.c b/sysdeps/ieee754/flt-32/s_atanf.c
index 159391894f..be2addbdff 100644
--- a/sysdeps/ieee754/flt-32/s_atanf.c
+++ b/sysdeps/ieee754/flt-32/s_atanf.c
@@ -60,7 +60,7 @@ float __atanf(float x)
GET_FLOAT_WORD(hx,x);
ix = hx&0x7fffffff;
- if(ix>=0x50800000) { /* if |x| >= 2^34 */
+ if(ix>=0x4c000000) { /* if |x| >= 2^25 */
if(ix>0x7f800000)
return x+x; /* NaN */
if(hx>0) return atanhi[3]+atanlo[3];