e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -173.653260833614780267453170381486415863:\\
\;\;\;\;\sqrt[3]{{\left(e^{a \cdot x} - 1\right)}^{3}}\\
\mathbf{else}:\\
\;\;\;\;a \cdot x + x \cdot \left(\left(\left(a \cdot x\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 r91492 = a;
double r91493 = x;
double r91494 = r91492 * r91493;
double r91495 = exp(r91494);
double r91496 = 1.0;
double r91497 = r91495 - r91496;
return r91497;
}
double f(double a, double x) {
double r91498 = a;
double r91499 = x;
double r91500 = r91498 * r91499;
double r91501 = -173.65326083361478;
bool r91502 = r91500 <= r91501;
double r91503 = exp(r91500);
double r91504 = 1.0;
double r91505 = r91503 - r91504;
double r91506 = 3.0;
double r91507 = pow(r91505, r91506);
double r91508 = cbrt(r91507);
double r91509 = r91500 * r91498;
double r91510 = 0.16666666666666666;
double r91511 = r91500 * r91510;
double r91512 = 0.5;
double r91513 = r91511 + r91512;
double r91514 = r91509 * r91513;
double r91515 = r91499 * r91514;
double r91516 = r91500 + r91515;
double r91517 = r91502 ? r91508 : r91516;
return r91517;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.6 |
|---|---|
| Target | 0.2 |
| Herbie | 0.5 |
if (* a x) < -173.65326083361478Initial program 0
rmApplied add-cbrt-cube0
Simplified0
if -173.65326083361478 < (* a x) Initial program 44.1
Taylor expanded around 0 14.4
Simplified4.9
rmApplied associate-*r*4.9
Simplified0.7
rmApplied distribute-lft-in0.7
Simplified0.7
Final simplification0.5
herbie shell --seed 2019325
(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))