double f(double x) {
double r6655685 = x;
double r6655686 = exp(r6655685);
double r6655687 = 1.0;
double r6655688 = r6655686 - r6655687;
return r6655688;
}
double f(double x) {
double r6655689 = x;
double r6655690 = 0.00016358488783184289;
bool r6655691 = r6655689 <= r6655690;
double r6655692 = r6655689 * r6655689;
double r6655693 = 0.16666666666666666;
double r6655694 = r6655693 * r6655689;
double r6655695 = 0.5;
double r6655696 = r6655694 + r6655695;
double r6655697 = r6655692 * r6655696;
double r6655698 = r6655689 + r6655697;
double r6655699 = exp(r6655689);
double r6655700 = r6655699 * r6655699;
double r6655701 = 1.0;
double r6655702 = r6655700 - r6655701;
double r6655703 = r6655701 + r6655699;
double r6655704 = r6655702 / r6655703;
double r6655705 = r6655691 ? r6655698 : r6655704;
return r6655705;
}
e^{x} - 1\begin{array}{l}
\mathbf{if}\;x \le 0.00016358488783184289:\\
\;\;\;\;x + \left(x \cdot x\right) \cdot \left(\frac{1}{6} \cdot x + \frac{1}{2}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{e^{x} \cdot e^{x} - 1}{1 + e^{x}}\\
\end{array}



Bits error versus x
| Original | 58.9 |
|---|---|
| Target | 0.4 |
| Herbie | 0.1 |
if x < 0.00016358488783184289Initial program 59.4
Taylor expanded around 0 0.0
Simplified0.0
if 0.00016358488783184289 < x Initial program 2.0
rmApplied flip--6.0
Final simplification0.1
herbie shell --seed 2019102
(FPCore (x)
:name "expm1 (example 3.7)"
:pre (< -0.00017 x)
:herbie-target
(* x (+ (+ 1 (/ x 2)) (/ (* x x) 6)))
(- (exp x) 1))