Lines 22-32
pi = 3.1415925026e+00, /* 0x40490fda */
Link Here
|
22 |
pio2_hi = 1.5707962513e+00; /* 0x3fc90fda */ |
22 |
pio2_hi = 1.5707962513e+00; /* 0x3fc90fda */ |
23 |
static volatile float |
23 |
static volatile float |
24 |
pio2_lo = 7.5497894159e-08; /* 0x33a22168 */ |
24 |
pio2_lo = 7.5497894159e-08; /* 0x33a22168 */ |
|
|
25 |
|
26 |
/* |
27 |
* The coefficients for the rational approximatione were generated over |
28 |
* 0x1p-12f <= x <= 0.5f. The maximum error satisfies log2(e) < -30.084. |
29 |
*/ |
25 |
static const float |
30 |
static const float |
26 |
pS0 = 1.6666586697e-01, |
31 |
pS0 = 1.66666672e-01f, /* 0x3e2aaaab */ |
27 |
pS1 = -4.2743422091e-02, |
32 |
pS1 = -1.19510300e-01f, /* 0xbdf4c1d1 */ |
28 |
pS2 = -8.6563630030e-03, |
33 |
pS2 = 5.47002675e-03f, /* 0x3bb33de9 */ |
29 |
qS1 = -7.0662963390e-01; |
34 |
qS1 = -1.16706085e+00f, /* 0xbf956240 */ |
|
|
35 |
qS2 = 2.90115148e-01f; /* 0x3e9489f9 */ |
30 |
|
36 |
|
31 |
float |
37 |
float |
32 |
acosf(float x) |
38 |
acosf(float x) |
Lines 46-58
acosf(float x)
Link Here
|
46 |
if(ix<=0x32800000) return pio2_hi+pio2_lo;/*if|x|<2**-26*/ |
52 |
if(ix<=0x32800000) return pio2_hi+pio2_lo;/*if|x|<2**-26*/ |
47 |
z = x*x; |
53 |
z = x*x; |
48 |
p = z*(pS0+z*(pS1+z*pS2)); |
54 |
p = z*(pS0+z*(pS1+z*pS2)); |
49 |
q = one+z*qS1; |
55 |
q = one+z*(qS1+z*qS2); |
50 |
r = p/q; |
56 |
r = p/q; |
51 |
return pio2_hi - (x - (pio2_lo-x*r)); |
57 |
return pio2_hi - (x - (pio2_lo-x*r)); |
52 |
} else if (hx<0) { /* x < -0.5 */ |
58 |
} else if (hx<0) { /* x < -0.5 */ |
53 |
z = (one+x)*(float)0.5; |
59 |
z = (one+x)*(float)0.5; |
54 |
p = z*(pS0+z*(pS1+z*pS2)); |
60 |
p = z*(pS0+z*(pS1+z*pS2)); |
55 |
q = one+z*qS1; |
61 |
q = one+z*(qS1+z*qS2); |
56 |
s = sqrtf(z); |
62 |
s = sqrtf(z); |
57 |
r = p/q; |
63 |
r = p/q; |
58 |
w = r*s-pio2_lo; |
64 |
w = r*s-pio2_lo; |
Lines 66-72
acosf(float x)
Link Here
|
66 |
SET_FLOAT_WORD(df,idf&0xfffff000); |
72 |
SET_FLOAT_WORD(df,idf&0xfffff000); |
67 |
c = (z-df*df)/(s+df); |
73 |
c = (z-df*df)/(s+df); |
68 |
p = z*(pS0+z*(pS1+z*pS2)); |
74 |
p = z*(pS0+z*(pS1+z*pS2)); |
69 |
q = one+z*qS1; |
75 |
q = one+z*(qS1+z*qS2); |
70 |
r = p/q; |
76 |
r = p/q; |
71 |
w = r*s+c; |
77 |
w = r*s+c; |
72 |
return (float)2.0*(df+w); |
78 |
return (float)2.0*(df+w); |