37 namespace approx_math {
61 return y * ( float(0x1.0671c4p0) +
y * ( float(-0x7.27744p-4) )) ;
67 return y * (float(0x1.013354p0) +
y * (-float(0x8.33006p-4) +
y * float(0x4.0d16cp-4))) ;
73 return y * (float(0xf.ff5bap-4) +
y * (-float(0x8.13e5ep-4) +
y * (float(0x5.826ep-4) +
y * (-float(0x2.e87fb8p-4))))) ;
79 return y * (float(0xf.ff652p-4) +
y * (-float(0x8.0048ap-4) +
y * (float(0x5.72782p-4) +
y * (-float(0x4.20904p-4) +
y * float(0x2.1d7fd8p-4))))) ;
85 return y * (float(0xf.fff14p-4) +
y * (-float(0x7.ff4bfp-4) +
y * (float(0x5.582f6p-4) +
y * (-float(0x4.1dcf2p-4) +
y * (float(0x3.3863f8p-4) +
y * (-float(0x1.9288d4p-4))))))) ;
91 return y * (float(0x1.000034p0) +
y * (-float(0x7.ffe57p-4) +
y * (float(0x5.5422ep-4) +
y * (-float(0x4.037a6p-4) +
y * (float(0x3.541c88p-4) +
y * (-float(0x2.af842p-4) +
y * float(0x1.48b3d8p-4))))))) ;
97 return y * ( float(0x1.00000cp0) +
y * (float(-0x8.0003p-4) +
y * (float(0x5.55087p-4) +
y * ( float(-0x3.fedcep-4) +
y * (float(0x3.3a1dap-4) +
y * (float(-0x2.cb55fp-4) +
y * (float(0x2.38831p-4) +
y * (float(-0xf.e87cap-8) )))))))) ;
104 using namespace approx_math;
110 int e= (((xx.i32) >> 23) & 0xFF) -127;
111 m.i32 = (xx.i32 & 0x007FFFFF) | 0x3F800000;
113 int adjust = (xx.i32>>22)&1;
114 m.i32 -= adjust << 23;
122 float p = approx_logf_P<DEGREE>(
y);
126 return float(
e)*Log2+
p;
130 #ifndef NO_APPROX_MATH
133 return unsafe_logf_impl<DEGREE>(
x);
138 using namespace approx_math;
141 constexpr float MAXNUMF = 3.4028234663852885981170418348451692544e38f;
144 float res = unsafe_logf<DEGREE>(
x);
146 return (x>0) ? res :std::numeric_limits<float>::quiet_NaN();
161 #endif // NO_APPROX_MATH
float approx_logf_P< 8 >(float y)
float approx_logf_P< 4 >(float y)
float approx_logf_P< 3 >(float y)
float approx_logf(float x)
float approx_logf_P< 6 >(float y)
float unsafe_logf_impl(float x)
float approx_logf_P(float p)
float approx_logf_P< 2 >(float y)
float unsafe_logf(float x)
float approx_logf_P< 7 >(float y)
float approx_logf_P< 5 >(float y)