e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -6.158968166252154678263867892962224459552 \cdot 10^{-6}:\\
\;\;\;\;\left(\sqrt[3]{e^{a \cdot x} - 1} \cdot \sqrt[3]{e^{a \cdot x} - 1}\right) \cdot \sqrt[3]{e^{a \cdot x} - 1}\\
\mathbf{else}:\\
\;\;\;\;a \cdot \left(a \cdot \left({x}^{2} \cdot \left(\frac{1}{2} + x \cdot \left(\frac{1}{6} \cdot a\right)\right)\right) + x\right)\\
\end{array}double f(double a, double x) {
double r118618 = a;
double r118619 = x;
double r118620 = r118618 * r118619;
double r118621 = exp(r118620);
double r118622 = 1.0;
double r118623 = r118621 - r118622;
return r118623;
}
double f(double a, double x) {
double r118624 = a;
double r118625 = x;
double r118626 = r118624 * r118625;
double r118627 = -6.158968166252155e-06;
bool r118628 = r118626 <= r118627;
double r118629 = exp(r118626);
double r118630 = 1.0;
double r118631 = r118629 - r118630;
double r118632 = cbrt(r118631);
double r118633 = r118632 * r118632;
double r118634 = r118633 * r118632;
double r118635 = 2.0;
double r118636 = pow(r118625, r118635);
double r118637 = 0.5;
double r118638 = 0.16666666666666666;
double r118639 = r118638 * r118624;
double r118640 = r118625 * r118639;
double r118641 = r118637 + r118640;
double r118642 = r118636 * r118641;
double r118643 = r118624 * r118642;
double r118644 = r118643 + r118625;
double r118645 = r118624 * r118644;
double r118646 = r118628 ? r118634 : r118645;
return r118646;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.5 |
|---|---|
| Target | 0.1 |
| Herbie | 3.0 |
if (* a x) < -6.158968166252155e-06Initial program 0.1
rmApplied add-cube-cbrt0.1
if -6.158968166252155e-06 < (* a x) Initial program 44.7
Taylor expanded around 0 14.8
Simplified4.5
Final simplification3.0
herbie shell --seed 2019351
(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))