1: 2: 3:
4:
5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
15:
16: #include "math.h"
17: #include "math_private.h"
18:
19: static const float
20: one = 1.0000000000e+00,
21: C1 = 4.1666667908e-02,
22: C2 = -1.3888889225e-03,
23: C3 = 2.4801587642e-05,
24: C4 = -2.7557314297e-07,
25: C5 = 2.0875723372e-09,
26: C6 = -1.1359647598e-11;
27:
28: float
29: __kernel_cosf(float x, float y)
30: {
31: float a,hz,z,r,qx;
32: int32_t ix;
33: GET_FLOAT_WORD(ix,x);
34: ix &= 0x7fffffff;
35: if(ix<0x32000000) {
36: if(((int)x)==0) return one;
37: }
38: z = x*x;
39: r = z*(C1+z*(C2+z*(C3+z*(C4+z*(C5+z*C6)))));
40: if(ix < 0x3e99999a)
41: return one - ((float)0.5*z - (z*r - x*y));
42: else {
43: if(ix > 0x3f480000) {
44: qx = (float)0.28125;
45: } else {
46: SET_FLOAT_WORD(qx,ix-0x01000000);
47: }
48: hz = (float)0.5*z-qx;
49: a = one-qx;
50: return a - (hz - (z*r-x*y));
51: }
52: }