e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -0.07174886411196652880040147692852769978344:\\
\;\;\;\;\frac{\log \left(e^{e^{\left(a \cdot x\right) \cdot 3} - \left(1 \cdot 1\right) \cdot 1}\right)}{\mathsf{fma}\left(e^{a \cdot x}, 1 + e^{a \cdot x}, 1 \cdot 1\right)}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{2}, \left(a \cdot x\right) \cdot \left(a \cdot x\right), x \cdot \left(\left(\frac{1}{6} \cdot a\right) \cdot \left(\left(a \cdot x\right) \cdot \left(a \cdot x\right)\right)\right) + a \cdot x\right)\\
\end{array}double f(double a, double x) {
double r4905710 = a;
double r4905711 = x;
double r4905712 = r4905710 * r4905711;
double r4905713 = exp(r4905712);
double r4905714 = 1.0;
double r4905715 = r4905713 - r4905714;
return r4905715;
}
double f(double a, double x) {
double r4905716 = a;
double r4905717 = x;
double r4905718 = r4905716 * r4905717;
double r4905719 = -0.07174886411196653;
bool r4905720 = r4905718 <= r4905719;
double r4905721 = 3.0;
double r4905722 = r4905718 * r4905721;
double r4905723 = exp(r4905722);
double r4905724 = 1.0;
double r4905725 = r4905724 * r4905724;
double r4905726 = r4905725 * r4905724;
double r4905727 = r4905723 - r4905726;
double r4905728 = exp(r4905727);
double r4905729 = log(r4905728);
double r4905730 = exp(r4905718);
double r4905731 = r4905724 + r4905730;
double r4905732 = fma(r4905730, r4905731, r4905725);
double r4905733 = r4905729 / r4905732;
double r4905734 = 0.5;
double r4905735 = r4905718 * r4905718;
double r4905736 = 0.16666666666666666;
double r4905737 = r4905736 * r4905716;
double r4905738 = r4905737 * r4905735;
double r4905739 = r4905717 * r4905738;
double r4905740 = r4905739 + r4905718;
double r4905741 = fma(r4905734, r4905735, r4905740);
double r4905742 = r4905720 ? r4905733 : r4905741;
return r4905742;
}




Bits error versus a




Bits error versus x
| Original | 29.3 |
|---|---|
| Target | 0.2 |
| Herbie | 0.3 |
if (* a x) < -0.07174886411196653Initial program 0.0
rmApplied flip3--0.0
Simplified0.0
Simplified0.0
rmApplied add-log-exp0.0
if -0.07174886411196653 < (* a x) Initial program 44.2
Taylor expanded around 0 13.8
Simplified0.5
rmApplied distribute-lft-in0.5
Final simplification0.3
herbie shell --seed 2019172 +o rules:numerics
(FPCore (a x)
:name "expax (section 3.5)"
:herbie-expected 14
:herbie-target
(if (< (fabs (* a x)) 0.1) (* (* a x) (+ 1.0 (+ (/ (* a x) 2.0) (/ (pow (* a x) 2.0) 6.0)))) (- (exp (* a x)) 1.0))
(- (exp (* a x)) 1.0))