Disable Bessel function TLOSS errors in POSIX mode.

This commit is contained in:
Joseph Myers 2012-03-16 20:08:02 +00:00
parent 11b90b9f50
commit c36e1d2369
14 changed files with 169 additions and 30 deletions

View File

@ -1,5 +1,40 @@
2012-03-16 Joseph Myers <joseph@codesourcery.com>
[BZ #2551]
[BZ #2552]
[BZ #2553]
[BZ #2554]
[BZ #2562]
[BZ #2563]
[BZ #2565]
[BZ #2566]
[BZ #2576]
* math/w_j0.c (j0): Don't produce TLOSS errors for POSIX libm.
(y0): Likewise.
* math/w_j0f.c (j0f): Likewise.
(y0f): Likewise.
* math/w_j0l.c (__j0l): Likewise.
(__y0l): Likewise.
* math/w_j1.c (j1): Likewise.
(y1): Likewise.
* math/w_j1f.c (j1f): Likewise.
(y1f): Likewise.
* math/w_j1l.c (__j1l): Likewise.
(__y1l): Likewise.
* math/w_jn.c (jn): Likewise.
(yn): Likewise.
* math/w_jnf.c (jnf): Likewise.
(ynf): Likewise.
* math/w_jnl.c (__jnl): Likewise.
(__ynl): Likewise.
* math/libm-test.inc (j0_test): Add more tests.
(j1_test): Likewise.
(jn_test): Likewise. Add trailing semicolon to existing test.
(y0_test): Likewise.
(y1_test): Likewise.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
[BZ #13851]
[BZ #13854]
* sysdeps/ieee754/dbl-64/s_tan.c (tan): Use

15
NEWS
View File

@ -9,13 +9,14 @@ Version 2.16
* The following bugs are resolved with this release:
174, 350, 411, 2541, 2547, 2548, 3335, 3976, 3992, 4026, 4108, 4596, 4822,
5077, 5461, 5805, 5993, 6884, 6907, 6911, 9739, 9902, 10110, 10135, 10140,
10210, 10545, 10716, 11174, 11322, 11365, 11494, 12047, 13058, 13525,
13526, 13527, 13528, 13529, 13530, 13531, 13532, 13533, 13547, 13551,
13552, 13553, 13555, 13559, 13566, 13583, 13618, 13637, 13656, 13658,
13673, 13695, 13704, 13706, 13726, 13738, 13786, 13792, 13806, 13840,
13841, 13844, 13846, 13851, 13852, 13854
174, 350, 411, 2541, 2547, 2548, 2551, 2552, 2553, 2554, 2562, 2563, 2565,
2566, 2576, 3335, 3976, 3992, 4026, 4108, 4596, 4822, 5077, 5461, 5805,
5993, 6884, 6907, 6911, 9739, 9902, 10110, 10135, 10140, 10210, 10545,
10716, 11174, 11322, 11365, 11494, 12047, 13058, 13525, 13526, 13527,
13528, 13529, 13530, 13531, 13532, 13533, 13547, 13551, 13552, 13553,
13555, 13559, 13566, 13583, 13618, 13637, 13656, 13658, 13673, 13695,
13704, 13706, 13726, 13738, 13786, 13792, 13806, 13840, 13841, 13844,
13846, 13851, 13852, 13854
* ISO C11 support:

View File

@ -3686,6 +3686,12 @@ j0_test (void)
TEST_f_f (j0, 4.0, -3.9714980986384737228659076845169804197562E-1L);
TEST_f_f (j0, -4.0, -3.9714980986384737228659076845169804197562E-1L);
TEST_f_f (j0, 0x1.d7ce3ap+107L, 2.775523647291230802651040996274861694514e-17L);
#ifndef TEST_FLOAT
TEST_f_f (j0, -0x1.001000001p+593L, -3.927269966354206207832593635798954916263e-90L);
#endif
END (j0);
}
@ -3721,6 +3727,12 @@ j1_test (void)
TEST_f_f (j1, 8.0, 0.234636346853914624381276651590454612L);
TEST_f_f (j1, 10.0, 0.0434727461688614366697487680258592883L);
TEST_f_f (j1, 0x1.3ffp+74L, 1.818984347516051243459364437186082741567e-12L);
#ifndef TEST_FLOAT
TEST_f_f (j1, 0x1.ff00000000002p+840L, 1.846591691699331493194965158699937660696e-127L);
#endif
END (j1);
}
@ -3801,7 +3813,9 @@ jn_test (void)
TEST_ff_f (jn, 6, 2.4048255576957729L, 0.34048184720278336646673682895929161E-2L);
TEST_ff_f (jn, 7, 2.4048255576957729L, 0.60068836573295394221291569249883076E-3L);
TEST_ff_f (jn, 8, 2.4048255576957729L, 0.92165786705344923232879022467054148E-4L);
TEST_ff_f (jn, 9, 2.4048255576957729L, 0.12517270977961513005428966643852564E-4L)
TEST_ff_f (jn, 9, 2.4048255576957729L, 0.12517270977961513005428966643852564E-4L);
TEST_ff_f (jn, 2, 0x1.ffff62p+99L, -4.43860668048170034334926693188979974489e-16L);
END (jn);
}
@ -7152,6 +7166,12 @@ y0_test (void)
TEST_f_f (y0, 8.0, 0.223521489387566220527323400498620359L);
TEST_f_f (y0, 10.0, 0.0556711672835993914244598774101900481L);
TEST_f_f (y0, 0x1.3ffp+74L, 1.818984347516051243459467456433028748678e-12L);
#ifndef TEST_FLOAT
TEST_f_f (y0, 0x1.ff00000000002p+840L, 1.846591691699331493194965158699937660696e-127L);
#endif
END (y0);
}
@ -7186,6 +7206,12 @@ y1_test (void)
TEST_f_f (y1, 8.0, -0.158060461731247494255555266187483550L);
TEST_f_f (y1, 10.0, 0.249015424206953883923283474663222803L);
TEST_f_f (y1, 0x1.27e204p+99L, -8.881610148467797208469612080785210013461e-16L);
#ifndef TEST_FLOAT
TEST_f_f (y1, 0x1.001000001p+593L, 3.927269966354206207832593635798954916263e-90L);
#endif
END (y1);
}

View File

@ -26,7 +26,7 @@ double
j0 (double x)
{
if (__builtin_expect (isgreater (fabs (x), X_TLOSS), 0)
&& _LIB_VERSION != _IEEE_)
&& _LIB_VERSION != _IEEE_ && _LIB_VERSION != _POSIX_)
/* j0(|x|>X_TLOSS) */
return __kernel_standard (x, x, 34);
@ -53,7 +53,7 @@ y0 (double x)
else if (x == 0.0)
/* d = -one/(x-x) */
return __kernel_standard (x, x, 8);
else
else if (_LIB_VERSION != _POSIX_)
/* y0(x>X_TLOSS) */
return __kernel_standard (x, x, 35);
}

View File

@ -26,7 +26,7 @@ float
j0f (float x)
{
if (__builtin_expect (isgreater (fabsf (x), (float) X_TLOSS), 0)
&& _LIB_VERSION != _IEEE_)
&& _LIB_VERSION != _IEEE_ && _LIB_VERSION != _POSIX_)
/* j0(|x|>X_TLOSS) */
return __kernel_standard_f (x, x, 134);
@ -51,7 +51,7 @@ y0f (float x)
else if (x == 0.0f)
/* d = -one/(x-x) */
return __kernel_standard_f (x, x, 108);
else
else if (_LIB_VERSION != _POSIX_)
/* y0(x>X_TLOSS) */
return __kernel_standard_f (x, x, 135);
}

View File

@ -26,7 +26,7 @@ long double
__j0l (long double x)
{
if (__builtin_expect (isgreater (fabsl (x), X_TLOSS), 0)
&& _LIB_VERSION != _IEEE_)
&& _LIB_VERSION != _IEEE_ && _LIB_VERSION != _POSIX_)
/* j0(|x|>X_TLOSS) */
return __kernel_standard (x, x, 234);
@ -51,7 +51,7 @@ __y0l (long double x)
else if (x == 0.0L)
/* d = -one/(x-x) */
return __kernel_standard (x, x, 208);
else
else if (_LIB_VERSION != _POSIX_)
/* y0(x>X_TLOSS) */
return __kernel_standard (x, x, 235);
}

View File

@ -26,7 +26,7 @@ double
j1 (double x)
{
if (__builtin_expect (isgreater (fabs (x), X_TLOSS), 0)
&& _LIB_VERSION != _IEEE_)
&& _LIB_VERSION != _IEEE_ && _LIB_VERSION != _POSIX_)
/* j1(|x|>X_TLOSS) */
return __kernel_standard (x, x, 36);
@ -53,7 +53,7 @@ y1 (double x)
else if (x == 0.0)
/* d = -one/(x-x) */
return __kernel_standard (x, x, 10);
else
else if (_LIB_VERSION != _POSIX_)
/* y1(x>X_TLOSS) */
return __kernel_standard (x, x, 37);
}

View File

@ -26,7 +26,7 @@ float
j1f (float x)
{
if (__builtin_expect (isgreater (fabsf (x), X_TLOSS), 0)
&& _LIB_VERSION != _IEEE_)
&& _LIB_VERSION != _IEEE_ && _LIB_VERSION != _POSIX_)
/* j1(|x|>X_TLOSS) */
return __kernel_standard_f (x, x, 136);
@ -51,7 +51,7 @@ y1f (float x)
else if (x == 0.0f)
/* d = -one/(x-x) */
return __kernel_standard_f (x, x, 110);
else
else if (_LIB_VERSION != _POSIX_)
/* y1(x>X_TLOSS) */
return __kernel_standard_f (x, x, 137);
}

View File

@ -26,7 +26,7 @@ long double
__j1l (long double x)
{
if (__builtin_expect (isgreater (fabsl (x), X_TLOSS), 0)
&& _LIB_VERSION != _IEEE_)
&& _LIB_VERSION != _IEEE_ && _LIB_VERSION != _POSIX_)
/* j1(|x|>X_TLOSS) */
return __kernel_standard (x, x, 236);
@ -51,7 +51,7 @@ __y1l (long double x)
else if (x == 0.0L)
/* d = -one/(x-x) */
return __kernel_standard (x, x, 210);
else
else if (_LIB_VERSION != _POSIX_)
/* y1(x>X_TLOSS) */
return __kernel_standard (x, x, 237);
}

View File

@ -26,7 +26,7 @@ double
jn (int n, double x)
{
if (__builtin_expect (isgreater (fabs (x), X_TLOSS), 0)
&& _LIB_VERSION != _IEEE_)
&& _LIB_VERSION != _IEEE_ && _LIB_VERSION != _POSIX_)
/* jn(n,|x|>X_TLOSS) */
return __kernel_standard (n, x, 38);
@ -53,7 +53,7 @@ yn (int n, double x)
else if (x == 0.0)
/* d = -one/(x-x) */
return __kernel_standard (n, x, 12);
else
else if (_LIB_VERSION != _POSIX_)
/* yn(n,x>X_TLOSS) */
return __kernel_standard (n, x, 39);
}

View File

@ -26,7 +26,7 @@ float
jnf (int n, float x)
{
if (__builtin_expect (isgreater (fabsf (x), (float) X_TLOSS), 0)
&& _LIB_VERSION != _IEEE_)
&& _LIB_VERSION != _IEEE_ && _LIB_VERSION != _POSIX_)
/* jn(n,|x|>X_TLOSS) */
return __kernel_standard_f (n, x, 138);
@ -51,7 +51,7 @@ ynf (int n, float x)
else if (x == 0.0)
/* d = -one/(x-x) */
return __kernel_standard_f (n, x, 112);
else
else if (_LIB_VERSION != _POSIX_)
/* yn(n,x>X_TLOSS) */
return __kernel_standard_f (n, x, 139);
}

View File

@ -54,7 +54,10 @@ long double __jnl(int n, long double x) /* wrapper jnl */
#else
long double z;
z = __ieee754_jnl(n,x);
if(_LIB_VERSION == _IEEE_ || __isnanl(x) ) return z;
if (_LIB_VERSION == _IEEE_
|| _LIB_VERSION == _POSIX_
|| __isnanl(x))
return z;
if(fabsl(x)>X_TLOSS) {
return __kernel_standard((double)n,x,238); /* jn(|x|>X_TLOSS,n) */
} else
@ -79,7 +82,7 @@ long double __ynl(int n, long double x) /* wrapper ynl */
/* d = zero/(x-x); */
return __kernel_standard((double)n,x,213);
}
if(x>X_TLOSS) {
if(x>X_TLOSS && _LIB_VERSION != _POSIX_) {
return __kernel_standard((double)n,x,239); /* yn(x>X_TLOSS,n) */
} else
return z;

View File

@ -1024,6 +1024,9 @@ Test "hypot (12.4, 0.7) == 12.419742348374220601176836866763271":
float: 1
# j0
Test "j0 (-0x1.001000001p+593) == -3.927269966354206207832593635798954916263e-90":
ildouble: 2
ldouble: 2
Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1":
double: 1
float: 2
@ -1031,6 +1034,9 @@ idouble: 1
ifloat: 2
ildouble: 2
ldouble: 2
Test "j0 (0x1.d7ce3ap+107) == 2.775523647291230802651040996274861694514e-17":
float: 1
ifloat: 1
Test "j0 (10.0) == -0.245935764451348335197760862485328754":
double: 3
float: 1
@ -1056,6 +1062,14 @@ ifloat: 1
Test "j1 (0.75) == 0.349243602174862192523281016426251335":
double: 1
idouble: 1
Test "j1 (0x1.3ffp+74) == 1.818984347516051243459364437186082741567e-12":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
Test "j1 (0x1.ff00000000002p+840) == 1.846591691699331493194965158699937660696e-127":
double: 1
idouble: 1
Test "j1 (10.0) == 0.0434727461688614366697487680258592883":
double: 2
float: 1
@ -1158,6 +1172,11 @@ double: 2
idouble: 2
ildouble: 1
ldouble: 1
Test "jn (2, 0x1.ffff62p+99) == -4.43860668048170034334926693188979974489e-16":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
Test "jn (2, 2.4048255576957729) == 0.43175480701968038399746111312430703":
double: 1
float: 1
@ -1745,6 +1764,14 @@ double: 1
float: 1
idouble: 1
ifloat: 1
Test "y0 (0x1.3ffp+74) == 1.818984347516051243459467456433028748678e-12":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
Test "y0 (0x1.ff00000000002p+840) == 1.846591691699331493194965158699937660696e-127":
double: 1
idouble: 1
Test "y0 (1.0) == 0.0882569642156769579829267660235151628":
double: 2
float: 1
@ -1776,6 +1803,16 @@ ldouble: 1
Test "y1 (0.125) == -5.19993611253477499595928744876579921":
ildouble: 1
ldouble: 1
Test "y1 (0x1.001000001p+593) == 3.927269966354206207832593635798954916263e-90":
ildouble: 2
ldouble: 2
Test "y1 (0x1.27e204p+99) == -8.881610148467797208469612080785210013461e-16":
double: 1
float: 2
idouble: 1
ifloat: 2
ildouble: 1
ldouble: 1
Test "y1 (1.0) == -0.781212821300288716547150000047964821":
double: 1
idouble: 1
@ -2434,8 +2471,8 @@ double: 2
float: 2
idouble: 2
ifloat: 2
ildouble: 1
ldouble: 1
ildouble: 2
ldouble: 2
Function: "yn":
double: 2

View File

@ -1073,6 +1073,9 @@ float: 1
ifloat: 1
# j0
Test "j0 (-0x1.001000001p+593) == -3.927269966354206207832593635798954916263e-90":
ildouble: 2
ldouble: 2
Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1":
double: 1
float: 1
@ -1083,6 +1086,9 @@ ldouble: 2
Test "j0 (0.75) == 0.864242275166648623555731103820923211":
float: 1
ifloat: 1
Test "j0 (0x1.d7ce3ap+107) == 2.775523647291230802651040996274861694514e-17":
float: 2
ifloat: 2
Test "j0 (10.0) == -0.245935764451348335197760862485328754":
double: 2
float: 1
@ -1105,6 +1111,14 @@ idouble: 2
ifloat: 1
# j1
Test "j1 (0x1.3ffp+74) == 1.818984347516051243459364437186082741567e-12":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
Test "j1 (0x1.ff00000000002p+840) == 1.846591691699331493194965158699937660696e-127":
double: 1
idouble: 1
Test "j1 (10.0) == 0.0434727461688614366697487680258592883":
float: 2
ifloat: 2
@ -1195,6 +1209,13 @@ idouble: 1
ifloat: 4
ildouble: 1
ldouble: 1
Test "jn (2, 0x1.ffff62p+99) == -4.43860668048170034334926693188979974489e-16":
double: 2
float: 2
idouble: 2
ifloat: 2
ildouble: 1
ldouble: 1
Test "jn (2, 2.4048255576957729) == 0.43175480701968038399746111312430703":
double: 2
float: 1
@ -1699,6 +1720,14 @@ ldouble: 1
Test "y0 (0.125) == -1.38968062514384052915582277745018693":
ildouble: 1
ldouble: 1
Test "y0 (0x1.3ffp+74) == 1.818984347516051243459467456433028748678e-12":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
Test "y0 (0x1.ff00000000002p+840) == 1.846591691699331493194965158699937660696e-127":
double: 1
idouble: 1
Test "y0 (1.0) == 0.0882569642156769579829267660235151628":
double: 2
float: 1
@ -1730,6 +1759,14 @@ double: 1
idouble: 1
ildouble: 1
ldouble: 1
Test "y1 (0x1.001000001p+593) == 3.927269966354206207832593635798954916263e-90":
ildouble: 2
ldouble: 2
Test "y1 (0x1.27e204p+99) == -8.881610148467797208469612080785210013461e-16":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
Test "y1 (1.5) == -0.412308626973911295952829820633445323":
float: 1
ifloat: 1
@ -2380,8 +2417,8 @@ double: 3
float: 2
idouble: 3
ifloat: 2
ildouble: 1
ldouble: 1
ildouble: 2
ldouble: 2
Function: "yn":
double: 3