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 r45779 = a;
double r45780 = x;
double r45781 = r45779 * r45780;
double r45782 = exp(r45781);
double r45783 = 1.0;
double r45784 = r45782 - r45783;
return r45784;
}
double f(double a, double x) {
double r45785 = a;
double r45786 = x;
double r45787 = r45785 * r45786;
double r45788 = -0.00011019581559322863;
bool r45789 = r45787 <= r45788;
double r45790 = exp(r45787);
double r45791 = 1.0;
double r45792 = r45790 - r45791;
double r45793 = 3.0;
double r45794 = pow(r45792, r45793);
double r45795 = cbrt(r45794);
double r45796 = r45786 * r45785;
double r45797 = r45796 * r45785;
double r45798 = 0.16666666666666666;
double r45799 = r45787 * r45798;
double r45800 = 0.5;
double r45801 = r45799 + r45800;
double r45802 = r45797 * r45801;
double r45803 = r45786 * r45802;
double r45804 = r45787 + r45803;
double r45805 = r45789 ? r45795 : r45804;
return r45805;
}




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))