|
@@ -11,6 +11,8 @@
|
|
|
* ====================================================
|
|
|
*/
|
|
|
|
|
|
+#include <assert.h>
|
|
|
+
|
|
|
#include "cdefs-compat.h"
|
|
|
//__FBSDID("$FreeBSD: src/lib/msun/src/e_j0.c,v 1.9 2008/02/22 02:30:35 das Exp $");
|
|
|
|
|
@@ -268,6 +270,7 @@ static const double pS2[5] = {
|
|
|
1.46576176948256193810e+01, /* 0x402D50B3, 0x44391809 */
|
|
|
};
|
|
|
|
|
|
+ /* Note: This function is only called for ix>=0x40000000 (see above) */
|
|
|
static double pzero(double x)
|
|
|
{
|
|
|
const double *p,*q;
|
|
@@ -275,10 +278,11 @@ static const double pS2[5] = {
|
|
|
int32_t ix;
|
|
|
GET_HIGH_WORD(ix,x);
|
|
|
ix &= 0x7fffffff;
|
|
|
+ assert(ix>=0x40000000 && ix<=0x48000000);
|
|
|
if(ix>=0x40200000) {p = pR8; q= pS8;}
|
|
|
else if(ix>=0x40122E8B){p = pR5; q= pS5;}
|
|
|
else if(ix>=0x4006DB6D){p = pR3; q= pS3;}
|
|
|
- else if(ix>=0x40000000){p = pR2; q= pS2;}
|
|
|
+ else {p = pR2; q= pS2;}
|
|
|
z = one/(x*x);
|
|
|
r = p[0]+z*(p[1]+z*(p[2]+z*(p[3]+z*(p[4]+z*p[5]))));
|
|
|
s = one+z*(q[0]+z*(q[1]+z*(q[2]+z*(q[3]+z*q[4]))));
|
|
@@ -363,6 +367,7 @@ static const double qS2[6] = {
|
|
|
-5.31095493882666946917e+00, /* 0xC0153E6A, 0xF8B32931 */
|
|
|
};
|
|
|
|
|
|
+ /* Note: This function is only called for ix>=0x40000000 (see above) */
|
|
|
static double qzero(double x)
|
|
|
{
|
|
|
const double *p,*q;
|
|
@@ -370,10 +375,11 @@ static const double qS2[6] = {
|
|
|
int32_t ix;
|
|
|
GET_HIGH_WORD(ix,x);
|
|
|
ix &= 0x7fffffff;
|
|
|
+ assert(ix>=0x40000000 && ix<=0x48000000);
|
|
|
if(ix>=0x40200000) {p = qR8; q= qS8;}
|
|
|
else if(ix>=0x40122E8B){p = qR5; q= qS5;}
|
|
|
else if(ix>=0x4006DB6D){p = qR3; q= qS3;}
|
|
|
- else if(ix>=0x40000000){p = qR2; q= qS2;}
|
|
|
+ else {p = qR2; q= qS2;}
|
|
|
z = one/(x*x);
|
|
|
r = p[0]+z*(p[1]+z*(p[2]+z*(p[3]+z*(p[4]+z*p[5]))));
|
|
|
s = one+z*(q[0]+z*(q[1]+z*(q[2]+z*(q[3]+z*(q[4]+z*q[5])))));
|