e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -1.4477752003782106 \cdot 10^{-4}:\\
\;\;\;\;\frac{{\left(e^{a \cdot x}\right)}^{3} - {1}^{3}}{e^{a \cdot x} \cdot \left(e^{a \cdot x} + 1\right) + 1 \cdot 1}\\
\mathbf{else}:\\
\;\;\;\;\left(a \cdot x + \frac{1}{2} \cdot {\left(a \cdot x\right)}^{2}\right) + \frac{1}{6} \cdot {\left(a \cdot x\right)}^{3}\\
\end{array}double f(double a, double x) {
double r99375 = a;
double r99376 = x;
double r99377 = r99375 * r99376;
double r99378 = exp(r99377);
double r99379 = 1.0;
double r99380 = r99378 - r99379;
return r99380;
}
double f(double a, double x) {
double r99381 = a;
double r99382 = x;
double r99383 = r99381 * r99382;
double r99384 = -0.00014477752003782106;
bool r99385 = r99383 <= r99384;
double r99386 = exp(r99383);
double r99387 = 3.0;
double r99388 = pow(r99386, r99387);
double r99389 = 1.0;
double r99390 = pow(r99389, r99387);
double r99391 = r99388 - r99390;
double r99392 = r99386 + r99389;
double r99393 = r99386 * r99392;
double r99394 = r99389 * r99389;
double r99395 = r99393 + r99394;
double r99396 = r99391 / r99395;
double r99397 = 0.5;
double r99398 = 2.0;
double r99399 = pow(r99383, r99398);
double r99400 = r99397 * r99399;
double r99401 = r99383 + r99400;
double r99402 = 0.16666666666666666;
double r99403 = pow(r99383, r99387);
double r99404 = r99402 * r99403;
double r99405 = r99401 + r99404;
double r99406 = r99385 ? r99396 : r99405;
return r99406;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.4 |
|---|---|
| Target | 0.2 |
| Herbie | 0.4 |
if (* a x) < -0.00014477752003782106Initial program 0.1
rmApplied flip3--0.1
Simplified0.1
if -0.00014477752003782106 < (* a x) Initial program 44.4
Taylor expanded around 0 14.7
Simplified14.7
rmApplied pow-prod-down5.0
rmApplied distribute-lft-in5.0
Simplified5.0
Simplified0.5
Final simplification0.4
herbie shell --seed 2020025
(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))