e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -0.01601638977115915629667597386287525296211:\\
\;\;\;\;\frac{\frac{e^{\left(a \cdot x\right) \cdot 4} - {1}^{4}}{\mathsf{fma}\left(1, 1, e^{2 \cdot \left(a \cdot x\right)}\right)}}{e^{a \cdot x} + 1}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(x, 1 \cdot a, {\left(a \cdot x\right)}^{2} \cdot \left(0.1666666666666666296592325124947819858789 \cdot \left(x \cdot a\right) + 0.5\right)\right)\\
\end{array}double f(double a, double x) {
double r92472 = a;
double r92473 = x;
double r92474 = r92472 * r92473;
double r92475 = exp(r92474);
double r92476 = 1.0;
double r92477 = r92475 - r92476;
return r92477;
}
double f(double a, double x) {
double r92478 = a;
double r92479 = x;
double r92480 = r92478 * r92479;
double r92481 = -0.016016389771159156;
bool r92482 = r92480 <= r92481;
double r92483 = 4.0;
double r92484 = r92480 * r92483;
double r92485 = exp(r92484);
double r92486 = 1.0;
double r92487 = pow(r92486, r92483);
double r92488 = r92485 - r92487;
double r92489 = 2.0;
double r92490 = r92489 * r92480;
double r92491 = exp(r92490);
double r92492 = fma(r92486, r92486, r92491);
double r92493 = r92488 / r92492;
double r92494 = exp(r92480);
double r92495 = r92494 + r92486;
double r92496 = r92493 / r92495;
double r92497 = r92486 * r92478;
double r92498 = pow(r92480, r92489);
double r92499 = 0.16666666666666663;
double r92500 = r92479 * r92478;
double r92501 = r92499 * r92500;
double r92502 = 0.5;
double r92503 = r92501 + r92502;
double r92504 = r92498 * r92503;
double r92505 = fma(r92479, r92497, r92504);
double r92506 = r92482 ? r92496 : r92505;
return r92506;
}




Bits error versus a




Bits error versus x
| Original | 28.9 |
|---|---|
| Target | 0.2 |
| Herbie | 0.3 |
if (* a x) < -0.016016389771159156Initial program 0.0
rmApplied flip--0.0
Simplified0.0
rmApplied flip--0.0
Simplified0.0
Simplified0.0
if -0.016016389771159156 < (* a x) Initial program 43.8
rmApplied flip--43.8
Simplified43.7
Taylor expanded around 0 14.6
Simplified0.5
rmApplied distribute-lft-in0.5
Simplified0.5
Simplified0.5
Taylor expanded around inf 14.6
Simplified0.5
Final simplification0.3
herbie shell --seed 2019304 +o rules:numerics
(FPCore (a x)
:name "expax (section 3.5)"
:precision binary64
:herbie-expected 14
:herbie-target
(if (< (fabs (* a x)) 0.10000000000000001) (* (* a x) (+ 1 (+ (/ (* a x) 2) (/ (pow (* a x) 2) 6)))) (- (exp (* a x)) 1))
(- (exp (* a x)) 1))