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 |