e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -0.3967409376004402132842585615435382351279:\\
\;\;\;\;\frac{{\left(e^{a \cdot x}\right)}^{3} - {1}^{3}}{e^{2 \cdot \left(a \cdot x\right)} + 1 \cdot \left(e^{a \cdot x} + 1\right)}\\
\mathbf{else}:\\
\;\;\;\;x \cdot \left(a + \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 r47439 = a;
double r47440 = x;
double r47441 = r47439 * r47440;
double r47442 = exp(r47441);
double r47443 = 1.0;
double r47444 = r47442 - r47443;
return r47444;
}
double f(double a, double x) {
double r47445 = a;
double r47446 = x;
double r47447 = r47445 * r47446;
double r47448 = -0.3967409376004402;
bool r47449 = r47447 <= r47448;
double r47450 = exp(r47447);
double r47451 = 3.0;
double r47452 = pow(r47450, r47451);
double r47453 = 1.0;
double r47454 = pow(r47453, r47451);
double r47455 = r47452 - r47454;
double r47456 = 2.0;
double r47457 = r47456 * r47447;
double r47458 = exp(r47457);
double r47459 = r47450 + r47453;
double r47460 = r47453 * r47459;
double r47461 = r47458 + r47460;
double r47462 = r47455 / r47461;
double r47463 = r47446 * r47445;
double r47464 = r47463 * r47445;
double r47465 = 0.16666666666666666;
double r47466 = r47447 * r47465;
double r47467 = 0.5;
double r47468 = r47466 + r47467;
double r47469 = r47464 * r47468;
double r47470 = r47445 + r47469;
double r47471 = r47446 * r47470;
double r47472 = r47449 ? r47462 : r47471;
return r47472;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.5 |
|---|---|
| Target | 0.2 |
| Herbie | 0.4 |
if (* a x) < -0.3967409376004402Initial program 0.0
rmApplied flip3--0.0
Simplified0.0
if -0.3967409376004402 < (* a x) Initial program 44.1
Taylor expanded around 0 14.4
Simplified4.7
rmApplied associate-*r*4.7
Simplified0.6
Final simplification0.4
herbie shell --seed 2019326
(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))