e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -6.952525294693658350925354570681857779846 \cdot 10^{-7}:\\
\;\;\;\;\frac{{\left(e^{a \cdot x}\right)}^{3} - {1}^{3}}{e^{a \cdot x} \cdot \left(e^{a \cdot x} + 1\right) + 1 \cdot 1}\\
\mathbf{else}:\\
\;\;\;\;x \cdot \left(a + \left(\frac{1}{2} \cdot {a}^{2}\right) \cdot x\right) + \frac{1}{6} \cdot \left({a}^{3} \cdot {x}^{3}\right)\\
\end{array}double f(double a, double x) {
double r123520 = a;
double r123521 = x;
double r123522 = r123520 * r123521;
double r123523 = exp(r123522);
double r123524 = 1.0;
double r123525 = r123523 - r123524;
return r123525;
}
double f(double a, double x) {
double r123526 = a;
double r123527 = x;
double r123528 = r123526 * r123527;
double r123529 = -6.952525294693658e-07;
bool r123530 = r123528 <= r123529;
double r123531 = exp(r123528);
double r123532 = 3.0;
double r123533 = pow(r123531, r123532);
double r123534 = 1.0;
double r123535 = pow(r123534, r123532);
double r123536 = r123533 - r123535;
double r123537 = r123531 + r123534;
double r123538 = r123531 * r123537;
double r123539 = r123534 * r123534;
double r123540 = r123538 + r123539;
double r123541 = r123536 / r123540;
double r123542 = 0.5;
double r123543 = 2.0;
double r123544 = pow(r123526, r123543);
double r123545 = r123542 * r123544;
double r123546 = r123545 * r123527;
double r123547 = r123526 + r123546;
double r123548 = r123527 * r123547;
double r123549 = 0.16666666666666666;
double r123550 = pow(r123526, r123532);
double r123551 = pow(r123527, r123532);
double r123552 = r123550 * r123551;
double r123553 = r123549 * r123552;
double r123554 = r123548 + r123553;
double r123555 = r123530 ? r123541 : r123554;
return r123555;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.0 |
|---|---|
| Target | 0.2 |
| Herbie | 9.3 |
if (* a x) < -6.952525294693658e-07Initial program 0.2
rmApplied flip3--0.2
Simplified0.2
if -6.952525294693658e-07 < (* a x) Initial program 44.5
Taylor expanded around 0 14.3
Simplified14.3
Final simplification9.3
herbie shell --seed 2020002
(FPCore (a x)
:name "expax (section 3.5)"
:precision binary64
:herbie-expected 14
:herbie-target
(if (< (fabs (* a x)) 0.1) (* (* a x) (+ 1 (+ (/ (* a x) 2) (/ (pow (* a x) 2) 6)))) (- (exp (* a x)) 1))
(- (exp (* a x)) 1))