19 static const volatile float huge = 1.0e+30, tiny = 1.0e-30;
23 o_threshold = 8.8721679688e+01,
24 ln2_hi = 6.9313812256e-01,
25 ln2_lo = 9.0580006145e-06,
26 invln2 = 1.4426950216e+00,
28 Q1 = -3.3333335072e-02,
29 Q2 = 1.5873016091e-03,
30 Q3 = -7.9365076090e-05,
31 Q4 = 4.0082177293e-06,
32 Q5 = -2.0109921195e-07;
37 float y,hi,lo,
c,t,e,hxs,hfx,r1;
43 if(xsb==0) y=x;
else y= -x;
47 if(hx >= 0x4195b844) {
48 if(hx >= 0x42b17218) {
52 return (xsb==0)? x:-1.0;
53 if(x > o_threshold)
return huge*huge;
65 {hi = x - ln2_hi; lo = ln2_lo; k = 1;}
67 {hi = x + ln2_hi; lo = -ln2_lo; k = -1;}
69 k = invln2*x+((xsb==0)?(
float)0.5:(float)-0.5);
77 else if(hx < 0x33000000) {
79 return x - (t-(huge+x));
87 t = (float)3.0-r1*hfx;
88 e = hxs*((r1-t)/((
float)6.0 - x*t));
89 if(k==0)
return x - (x*e-hxs);
93 if(k== -1)
return (
float)0.5*(x-e)-(
float)0.5;
95 if(x < (
float)-0.25)
return -(float)2.0*(e-(x+(
float)0.5));
96 else return one+(float)2.0*(x-e);
97 if (k <= -2 || k>56) {
#define SET_FLOAT_WORD(d, i)
#define GET_FLOAT_WORD(i, d)