Go to the source code of this file.
template<int DEGREE>
constexpr float approx_expf |
( |
float |
x | ) |
|
template<int DEGREE>
constexpr float approx_expf_P |
( |
float |
p | ) |
|
Definition at line 48 of file approx_exp.h.
References detailsBasic3DVector::y.
49 #ifdef HORNER // HORNER
50 return float(0x2.p0) +
y * (float(0x1.fff798p0) +
y * (float(0x1.02249p0) +
y * float(0x5.62042p-4)));
52 float p23 = (float(0x1.02249p0) +
y * float(0x5.62042p-4));
53 float p01 = float(0x2.p0) +
y * float(0x1.fff798p0);
54 return p01 +
y *
y * p23;
Definition at line 59 of file approx_exp.h.
References detailsBasic3DVector::y.
60 return float(0x2.p0) +
61 y * (float(0x1.fffb1p0) +
y * (float(0xf.ffe84p-4) +
y * (float(0x5.5f9c1p-4) +
y * float(0x1.57755p-4))));
Definition at line 65 of file approx_exp.h.
References detailsBasic3DVector::y.
66 return float(0x2.p0) +
67 y * (float(0x2.p0) +
y * (float(0xf.ffed8p-4) +
68 y * (float(0x5.5551cp-4) +
y * (float(0x1.5740d8p-4) +
y * float(0x4.49368p-8)))));
Definition at line 72 of file approx_exp.h.
References AlCaHLTBitMon_ParallelJobs::p, and detailsBasic3DVector::y.
73 #ifdef HORNER // HORNER
77 y * (float(0x1.p0) +
y * (float(0x5.55523p-4) +
y * (float(0x1.5554dcp-4) +
78 y * (float(0x4.48f41p-8) +
y * float(0xb.6ad4p-12))))));
79 #else // ESTRIN does seem to save a cycle or two
80 float p56 = float(0x4.48f41p-8) +
y * float(0xb.6ad4p-12);
81 float p34 = float(0x5.55523p-4) +
y * float(0x1.5554dcp-4);
83 float p12 = float(0x2.p0) +
y;
84 float p36 = p34 + y2 * p56;
85 float p16 = p12 + y2 * p36;
86 float p = float(0x2.p0) +
y * p16;
Definition at line 93 of file approx_exp.h.
References detailsBasic3DVector::y.
94 return float(0x2.p0) +
97 y * (float(0x5.55555p-4) +
98 y * (float(0x1.5554e4p-4) +
99 y * (float(0x4.444adp-8) +
y * (float(0xb.6a8a6p-12) +
y * float(0x1.9ec814p-12)))))));
template<int DEGREE>
constexpr float unsafe_expf |
( |
float |
x | ) |
|
template<int DEGREE>
constexpr float unsafe_expf_impl |
( |
float |
x | ) |
|
Definition at line 125 of file approx_exp.h.
References alignCSCRings::e, validate-o2o-wbm::f, approx_math::fpfloor(), and AlCaHLTBitMon_ParallelJobs::p.
126 using namespace approx_math;
137 constexpr
float inv_log2f = float(0x1.715476p0);
138 constexpr
float log2H = float(0xb.172p-4);
139 constexpr
float log2L = float(0x1.7f7d1cp-20);
143 float z =
fpfloor((x * inv_log2f) + 0.5
f);
158 float p = approx_expf_P<DEGREE>(
y);
162 uint32_t biased_exponent =
e + 127;
163 ef.ui32 = (biased_exponent << 23);
constexpr float fpfloor(float x)
uint16_t const *__restrict__ x