diff options
author | Joseph Myers <joseph@codesourcery.com> | 2013-09-02 14:51:24 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2013-09-02 14:51:24 +0000 |
commit | b7835e3223de60d3f5bf1fed66468b5052cd595f (patch) | |
tree | 028faceec3efa9b69de0052d6713c5b14bc29ee9 /sysdeps | |
parent | 8220f4f00803cfb26520a8bf2ca493493dde4f60 (diff) | |
download | glibc-b7835e3223de60d3f5bf1fed66468b5052cd595f.zip glibc-b7835e3223de60d3f5bf1fed66468b5052cd595f.tar.gz glibc-b7835e3223de60d3f5bf1fed66468b5052cd595f.tar.bz2 |
Fix spurious jnf underflows (bug 14155).
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/i386/fpu/libm-test-ulps | 20 | ||||
-rw-r--r-- | sysdeps/ieee754/flt-32/e_jnf.c | 4 | ||||
-rw-r--r-- | sysdeps/x86_64/fpu/libm-test-ulps | 19 |
3 files changed, 37 insertions, 6 deletions
diff --git a/sysdeps/i386/fpu/libm-test-ulps b/sysdeps/i386/fpu/libm-test-ulps index 530dbd7..8244863 100644 --- a/sysdeps/i386/fpu/libm-test-ulps +++ b/sysdeps/i386/fpu/libm-test-ulps @@ -5635,9 +5635,9 @@ ildouble: 1 ldouble: 1 Test "jn (10, 10.0)": double: 1 -float: 1 +float: 2 idouble: 1 -ifloat: 1 +ifloat: 2 ildouble: 2 ldouble: 2 Test "jn (10, 2.0)": @@ -5648,6 +5648,14 @@ float: 1 ifloat: 1 ildouble: 1 ldouble: 1 +Test "jn (2, 0x1p1023)": +double: 1 +idouble: 1 +Test "jn (2, 0x1p127)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 Test "jn (2, 2.4048255576957729)": double: 1 float: 1 @@ -6844,6 +6852,14 @@ ifloat: 1 Test "yn (10, 2.0)": float: 3 ifloat: 3 +Test "yn (2, 0x1.ffff62p+99)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "yn (2, 0x1p127)": +float: 2 +ifloat: 2 Test "yn (3, 0.125)": ildouble: 1 ldouble: 1 diff --git a/sysdeps/ieee754/flt-32/e_jnf.c b/sysdeps/ieee754/flt-32/e_jnf.c index ad26d7e..5984d94 100644 --- a/sysdeps/ieee754/flt-32/e_jnf.c +++ b/sysdeps/ieee754/flt-32/e_jnf.c @@ -54,7 +54,7 @@ __ieee754_jnf(int n, float x) b = __ieee754_j1f(x); for(i=1;i<n;i++){ temp = b; - b = b*((float)(i+i)/x) - a; /* avoid underflow */ + b = b*((double)(i+i)/x) - a; /* avoid underflow */ a = temp; } } else { @@ -196,7 +196,7 @@ __ieee754_ynf(int n, float x) GET_FLOAT_WORD(ib,b); for(i=1;i<n&&ib!=0xff800000;i++){ temp = b; - b = ((float)(i+i)/x)*b - a; + b = ((double)(i+i)/x)*b - a; GET_FLOAT_WORD(ib,b); a = temp; } diff --git a/sysdeps/x86_64/fpu/libm-test-ulps b/sysdeps/x86_64/fpu/libm-test-ulps index d02618a..477eedc 100644 --- a/sysdeps/x86_64/fpu/libm-test-ulps +++ b/sysdeps/x86_64/fpu/libm-test-ulps @@ -6403,6 +6403,11 @@ idouble: 2 ifloat: 2 ildouble: 1 ldouble: 1 +Test "jn (2, 0x1p127)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 Test "jn (2, 2.4048255576957729)": double: 2 float: 1 @@ -7728,6 +7733,16 @@ double: 3 float: 1 idouble: 3 ifloat: 1 +Test "yn (2, 0x1.ffff62p+99)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "yn (2, 0x1p127)": +double: 1 +float: 3 +idouble: 1 +ifloat: 3 Test "yn (3, 0.125)": double: 1 idouble: 1 @@ -8428,9 +8443,9 @@ ldouble: 2 Function: "yn": double: 3 -float: 2 +float: 3 idouble: 3 -ifloat: 2 +ifloat: 3 ildouble: 4 ldouble: 4 |