e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -1.644742988596980756777822009484513188227 \cdot 10^{-6}:\\
\;\;\;\;\frac{e^{2 \cdot \left(a \cdot x\right)} - 1 \cdot 1}{e^{a \cdot x} + 1}\\
\mathbf{else}:\\
\;\;\;\;x \cdot a + \frac{1}{6} \cdot {\left(a \cdot x\right)}^{3}\\
\end{array}double f(double a, double x) {
double r66528 = a;
double r66529 = x;
double r66530 = r66528 * r66529;
double r66531 = exp(r66530);
double r66532 = 1.0;
double r66533 = r66531 - r66532;
return r66533;
}
double f(double a, double x) {
double r66534 = a;
double r66535 = x;
double r66536 = r66534 * r66535;
double r66537 = -1.6447429885969808e-06;
bool r66538 = r66536 <= r66537;
double r66539 = 2.0;
double r66540 = r66539 * r66536;
double r66541 = exp(r66540);
double r66542 = 1.0;
double r66543 = r66542 * r66542;
double r66544 = r66541 - r66543;
double r66545 = exp(r66536);
double r66546 = r66545 + r66542;
double r66547 = r66544 / r66546;
double r66548 = r66535 * r66534;
double r66549 = 0.16666666666666666;
double r66550 = 3.0;
double r66551 = pow(r66536, r66550);
double r66552 = r66549 * r66551;
double r66553 = r66548 + r66552;
double r66554 = r66538 ? r66547 : r66553;
return r66554;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.6 |
|---|---|
| Target | 0.2 |
| Herbie | 0.8 |
if (* a x) < -1.6447429885969808e-06Initial program 0.1
rmApplied flip--0.1
Simplified0.1
if -1.6447429885969808e-06 < (* a x) Initial program 44.9
Taylor expanded around 0 14.5
Simplified14.5
rmApplied pow-prod-down4.6
Taylor expanded around 0 1.1
Simplified1.1
Final simplification0.8
herbie shell --seed 2019212
(FPCore (a x)
:name "expax (section 3.5)"
:precision binary64
:herbie-expected 14
:herbie-target
(if (< (fabs (* a x)) 0.10000000000000001) (* (* a x) (+ 1 (+ (/ (* a x) 2) (/ (pow (* a x) 2) 6)))) (- (exp (* a x)) 1))
(- (exp (* a x)) 1))