19 static const volatile float huge = 1.0e+30;
23 halF[2] = {0.5,-0.5,},
24 twom100 = 7.8886090522e-31,
25 o_threshold= 8.8721679688e+01,
26 u_threshold= -1.0397208405e+02,
27 ln2HI[2] ={ 6.9313812256e-01,
29 ln2LO[2] ={ 9.0580006145e-06,
31 invln2 = 1.4426950216e+00,
32 P1 = 1.6666667163e-01,
33 P2 = -2.7777778450e-03,
34 P3 = 6.6137559770e-05,
35 P4 = -1.6533901999e-06,
36 P5 = 4.1381369442e-08;
50 if(hx >= 0x42b17218) {
54 return (xsb==0)? x:0.0;
55 if(x > o_threshold)
return huge*huge;
56 if(x < u_threshold)
return twom100*twom100;
62 hi = x-ln2HI[xsb]; lo=ln2LO[xsb]; k = 1-xsb-xsb;
64 k = invln2*x+halF[xsb];
71 else if(hx < 0x31800000) {
72 if(huge+x>
one)
return one+x;
79 if(k==0)
return one-((x*
c)/(
c-(
float)2.0)-x);
80 else y =
one-((lo-(x*
c)/((
float)2.0-
c))-hi);
#define SET_FLOAT_WORD(d, i)
#define GET_FLOAT_WORD(i, d)