Math approximations for computing exponentials.
More...
Go to the source code of this file.
|
void | expF1_poly (FP_PRECISION x, FP_PRECISION *expF1) |
| Computes the F1 exponential term. More...
|
|
void | expF2_poly (FP_PRECISION x, FP_PRECISION *expF2) |
| Computes the F2 exponential term. More...
|
|
void | expH_poly (FP_PRECISION x, FP_PRECISION *expH) |
| Computes the H exponential term. More...
|
|
void | expG_fractional (FP_PRECISION x, FP_PRECISION *expG) |
| Computes an exponential G term, used to reconstruct F1, F2 and H. More...
|
|
void | expF1_fractional (FP_PRECISION x, FP_PRECISION *expF1) |
| Computes the F1 exponential term. More...
|
|
void | expF2_fractional (FP_PRECISION x, FP_PRECISION *expF2) |
| Computes the F2 exponential term. More...
|
|
void | expH_fractional (FP_PRECISION x, FP_PRECISION *expH) |
| Computes the H exponential term. More...
|
|
void | expG2_fractional (FP_PRECISION x, FP_PRECISION *expG2) |
| Computes the G2 exponential term. More...
|
|
void | cram7 (FP_PRECISION x, FP_PRECISION *expv) |
| Evaluates the function 1 - exp(x) for x negative. Vectorises well. Accurate to 6.18 digits (single precision) for entire domain (including near zero, unlike intrinsic) More...
|
|
Math approximations for computing exponentials.
- Date
- January 16, 2019
- Author
- Guillaume Giudicelli, MIT, Course 22 (g_giu.nosp@m.d@mi.nosp@m.t.edu)
◆ cram7()
void cram7 |
( |
FP_PRECISION |
x, |
|
|
FP_PRECISION * |
expv |
|
) |
| |
|
inline |
Evaluates the function 1 - exp(x) for x negative. Vectorises well. Accurate to 6.18 digits (single precision) for entire domain (including near zero, unlike intrinsic)
Valid for x ~= [-1.5e6, 0]
- Parameters
-
x | value at which to evaluate 1 - exp(x) |
expv | value of function |
◆ expF1_fractional()
void expF1_fractional |
( |
FP_PRECISION |
x, |
|
|
FP_PRECISION * |
expF1 |
|
) |
| |
|
inline |
Computes the F1 exponential term.
This method computes (1-exp(-x))/x using a 5/6th order rational approximation. It is accurate to 2e-6 over [0, 1e5]. It was generated by Colin Josey using Remez's algorithm.
- Parameters
-
x | the value at which to evaluate the function, usually tau |
expF1 | a pointer to the exponential |
◆ expF1_poly()
void expF1_poly |
( |
FP_PRECISION |
x, |
|
|
FP_PRECISION * |
expF1 |
|
) |
| |
|
inline |
Computes the F1 exponential term.
This method computes (1-exp(-x))/x using a 7th order polynomial approximation. It is accurate to 1e-5 over [0, 5]. It was generated by Colin Josey using Remez's algorithm.
- Parameters
-
x | the value at which to evaluate the function, usually tau |
expF1 | a pointer to the exponential |
◆ expF2_fractional()
void expF2_fractional |
( |
FP_PRECISION |
x, |
|
|
FP_PRECISION * |
expF2 |
|
) |
| |
|
inline |
Computes the F2 exponential term.
This method computes (x-2+exp(-x)*(2+x))/x**2 using a 5/6th order rational approximation. It is accurate to 2e-6 over [0, 1e5]. It was generated by Colin Josey using Remez's algorithm.
- Parameters
-
x | the value at which to evaluate the function, usually tau |
expF2 | a pointer to the exponential |
◆ expF2_poly()
void expF2_poly |
( |
FP_PRECISION |
x, |
|
|
FP_PRECISION * |
expF2 |
|
) |
| |
|
inline |
Computes the F2 exponential term.
This method computes (x-2+exp(-x)*(2+x))/x**2 using a 8th order polynomial approximation. It is accurate to 1e-5 over [0, 5]. It was generated by Colin Josey using Remez's algorithm.
- Parameters
-
x | the value at which to evaluate the function, usually tau |
expF2 | a pointer to the exponential |
◆ expG2_fractional()
void expG2_fractional |
( |
FP_PRECISION |
x, |
|
|
FP_PRECISION * |
expG2 |
|
) |
| |
|
inline |
Computes the G2 exponential term.
This method computes 2/3 - (1 + 2/x) * (1/x + 0.5 - (1 + 1/x) * (1-exp(-x)) / x) using a 5/5th order rational approximation. It is accurate to 1e-6 over [0, 1e6]. It was generated by Colin Josey using Remez's algorithm.
- Parameters
-
x | the value at which to evaluate the function, usually tau |
expG2 | a pointer to the exponential |
◆ expG_fractional()
void expG_fractional |
( |
FP_PRECISION |
x, |
|
|
FP_PRECISION * |
expG |
|
) |
| |
|
inline |
Computes an exponential G term, used to reconstruct F1, F2 and H.
This method computes 1/x-(1-exp(-x))/x**2 using a 5/6th order rational approximation. It is accurate to 2e-7 over [0, 1e5]. However, accuracy when reconstructing F1, F2 and H is lower. It was generated by Colin Josey using Remez's algorithm.
- Parameters
-
x | the value at which to evaluate the function, usually tau |
expG | a pointer to the exponential |
◆ expH_fractional()
void expH_fractional |
( |
FP_PRECISION |
x, |
|
|
FP_PRECISION * |
expH |
|
) |
| |
|
inline |
Computes the H exponential term.
This method computes (1-exp(-x)*(1+x))/x**2 using a 5/7th order rational approximation. It is accurate to 2e-6 over [0, 1e5]. It was generated by Colin Josey using Remez's algorithm.
- Parameters
-
x | the value at which to evaluate the function, usually tau |
expH | a pointer to the exponential |
◆ expH_poly()
void expH_poly |
( |
FP_PRECISION |
x, |
|
|
FP_PRECISION * |
expH |
|
) |
| |
|
inline |
Computes the H exponential term.
This method computes (1-exp(-x)*(1+x))/x**2 using a 8th order polynomial approximation. It is accurate to 1e-5 over [0, 5]. It was generated by Colin Josey using Remez's algorithm.
- Parameters
-
x | the value at which to evaluate the function, usually tau |
expH | a pointer to the exponential |