e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -1.101958155932286257490046454954324417486 \cdot 10^{-4}:\\
\;\;\;\;\sqrt[3]{{\left(e^{a \cdot x} - 1\right)}^{3}}\\
\mathbf{else}:\\
\;\;\;\;a \cdot x + x \cdot \left(\left(\left(x \cdot a\right) \cdot a\right) \cdot \left(\left(a \cdot x\right) \cdot \frac{1}{6} + \frac{1}{2}\right)\right)\\
\end{array}double f(double a, double x) {
double r45724 = a;
double r45725 = x;
double r45726 = r45724 * r45725;
double r45727 = exp(r45726);
double r45728 = 1.0;
double r45729 = r45727 - r45728;
return r45729;
}
double f(double a, double x) {
double r45730 = a;
double r45731 = x;
double r45732 = r45730 * r45731;
double r45733 = -0.00011019581559322863;
bool r45734 = r45732 <= r45733;
double r45735 = exp(r45732);
double r45736 = 1.0;
double r45737 = r45735 - r45736;
double r45738 = 3.0;
double r45739 = pow(r45737, r45738);
double r45740 = cbrt(r45739);
double r45741 = r45731 * r45730;
double r45742 = r45741 * r45730;
double r45743 = 0.16666666666666666;
double r45744 = r45732 * r45743;
double r45745 = 0.5;
double r45746 = r45744 + r45745;
double r45747 = r45742 * r45746;
double r45748 = r45731 * r45747;
double r45749 = r45732 + r45748;
double r45750 = r45734 ? r45740 : r45749;
return r45750;
}




Bits error versus a




Bits error versus x
Results
| Original | 28.9 |
|---|---|
| Target | 0.2 |
| Herbie | 0.3 |
if (* a x) < -0.00011019581559322863Initial program 0.1
rmApplied add-cbrt-cube0.1
Simplified0.1
if -0.00011019581559322863 < (* a x) Initial program 43.7
Taylor expanded around 0 14.5
Simplified4.3
rmApplied associate-*r*4.3
Simplified0.4
rmApplied distribute-lft-in0.4
Simplified0.4
Final simplification0.3
herbie shell --seed 2019323
(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))