e^{x} - 1\begin{array}{l}
\mathbf{if}\;e^{x} \le 1.00000003539203353:\\
\;\;\;\;{x}^{2} \cdot \left(x \cdot \frac{1}{6} + \frac{1}{2}\right) + x\\
\mathbf{else}:\\
\;\;\;\;\left(\sqrt{e^{x}} + \sqrt{1}\right) \cdot \left(\sqrt{e^{x}} - \sqrt{1}\right)\\
\end{array}double code(double x) {
return ((double) (((double) exp(x)) - 1.0));
}
double code(double x) {
double VAR;
if ((((double) exp(x)) <= 1.0000000353920335)) {
VAR = ((double) (((double) (((double) pow(x, 2.0)) * ((double) (((double) (x * 0.16666666666666666)) + 0.5)))) + x));
} else {
VAR = ((double) (((double) (((double) sqrt(((double) exp(x)))) + ((double) sqrt(1.0)))) * ((double) (((double) sqrt(((double) exp(x)))) - ((double) sqrt(1.0))))));
}
return VAR;
}




Bits error versus x
Results
| Original | 58.7 |
|---|---|
| Target | 0.5 |
| Herbie | 0.1 |
if (exp x) < 1.00000003539203353Initial program 59.5
Taylor expanded around 0 0.0
Simplified0.0
if 1.00000003539203353 < (exp x) Initial program 7.3
rmApplied add-sqr-sqrt7.3
Applied add-sqr-sqrt8.1
Applied difference-of-squares8.0
Final simplification0.1
herbie shell --seed 2020173
(FPCore (x)
:name "expm1 (example 3.7)"
:precision binary64
:pre (< -0.00017 x)
:herbie-target
(* x (+ (+ 1.0 (/ x 2.0)) (/ (* x x) 6.0)))
(- (exp x) 1.0))