aboutsummaryrefslogtreecommitdiff
path: root/sysdeps
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2015-05-15 17:47:29 +0000
committerJoseph Myers <joseph@codesourcery.com>2015-05-15 17:47:29 +0000
commit5a608ccc2d676aa124f6b55a7b20d071e408ca31 (patch)
tree41c40103e1b049d25bc519ca0688f48d82d61656 /sysdeps
parentff069f024ae8cf15d53429e034d67ddcece0f67a (diff)
downloadglibc-5a608ccc2d676aa124f6b55a7b20d071e408ca31.tar
glibc-5a608ccc2d676aa124f6b55a7b20d071e408ca31.tar.gz
glibc-5a608ccc2d676aa124f6b55a7b20d071e408ca31.tar.bz2
glibc-5a608ccc2d676aa124f6b55a7b20d071e408ca31.zip
Fix tanf spurious underflows (bug 18221).
The flt-32 implementation of tanf produces spurious underflow exceptions for some small arguments, through computing values on the order of x^5. This patch fixes this by adjusting the threshold for returning x (or, as applicable, +/- 1/x) to 2**-13 (the next term in the power series being x^3/3). Tested for x86_64 and x86. [BZ #18221] * sysdeps/ieee754/flt-32/k_tanf.c (__kernel_tanf): Use 2**-13 not 2**-28 as threshold for returning x or +/- 1/x. * math/auto-libm-test-in: Add more tests of tan. * math/auto-libm-test-out: Regenerated.
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/ieee754/flt-32/k_tanf.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/sysdeps/ieee754/flt-32/k_tanf.c b/sysdeps/ieee754/flt-32/k_tanf.c
index d918826338..a67f36e283 100644
--- a/sysdeps/ieee754/flt-32/k_tanf.c
+++ b/sysdeps/ieee754/flt-32/k_tanf.c
@@ -45,7 +45,7 @@ float __kernel_tanf(float x, float y, int iy)
int32_t ix,hx;
GET_FLOAT_WORD(hx,x);
ix = hx&0x7fffffff; /* high word of |x| */
- if(ix<0x31800000) /* x < 2**-28 */
+ if(ix<0x39000000) /* x < 2**-13 */
{if((int)x==0) { /* generate inexact */
if((ix|(iy+1))==0) return one/fabsf(x);
else return (iy==1)? x: -one/x;