e^{x} - 1\begin{array}{l}
\mathbf{if}\;e^{x} \le 1.000116207589260675092646124539896845818:\\
\;\;\;\;\mathsf{fma}\left(\mathsf{fma}\left(\frac{1}{6}, x, \frac{1}{2}\right), x \cdot x, x\right)\\
\mathbf{else}:\\
\;\;\;\;e^{x} + \left(-1\right)\\
\end{array}double f(double x) {
double r4449295 = x;
double r4449296 = exp(r4449295);
double r4449297 = 1.0;
double r4449298 = r4449296 - r4449297;
return r4449298;
}
double f(double x) {
double r4449299 = x;
double r4449300 = exp(r4449299);
double r4449301 = 1.0001162075892607;
bool r4449302 = r4449300 <= r4449301;
double r4449303 = 0.16666666666666666;
double r4449304 = 0.5;
double r4449305 = fma(r4449303, r4449299, r4449304);
double r4449306 = r4449299 * r4449299;
double r4449307 = fma(r4449305, r4449306, r4449299);
double r4449308 = 1.0;
double r4449309 = -r4449308;
double r4449310 = r4449300 + r4449309;
double r4449311 = r4449302 ? r4449307 : r4449310;
return r4449311;
}




Bits error versus x
| Original | 58.8 |
|---|---|
| Target | 0.4 |
| Herbie | 0.0 |
if (exp x) < 1.0001162075892607Initial program 59.3
Taylor expanded around 0 0.0
Simplified0.0
if 1.0001162075892607 < (exp x) Initial program 2.7
rmApplied sub-neg2.7
Final simplification0.0
herbie shell --seed 2019168 +o rules:numerics
(FPCore (x)
:name "expm1 (example 3.7)"
:pre (< -0.00017 x)
:herbie-target
(* x (+ (+ 1.0 (/ x 2.0)) (/ (* x x) 6.0)))
(- (exp x) 1.0))