e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -1.21980114088280676 \cdot 10^{-14}:\\
\;\;\;\;\frac{e^{2 \cdot \left(x \cdot a\right)} - 1 \cdot 1}{1 + e^{x \cdot a}}\\
\mathbf{elif}\;a \cdot x \le 3.0774139795037859 \cdot 10^{-19}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{6}, {a}^{3} \cdot {x}^{3}, x \cdot \left(a + \left(\frac{1}{2} \cdot {a}^{2}\right) \cdot x\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\sqrt[3]{e^{a \cdot x} - 1} \cdot \sqrt[3]{e^{a \cdot x} - 1}\right) \cdot \left(\left(\sqrt[3]{\sqrt[3]{\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}}} \cdot \sqrt[3]{\sqrt[3]{\mathsf{fma}\left(\sqrt[3]{e^{a \cdot x}} \cdot \sqrt[3]{e^{a \cdot x}}, \sqrt[3]{e^{a \cdot x}}, -1\right)}}\right) \cdot \sqrt[3]{\sqrt[3]{e^{a \cdot x} - 1}}\right)\\
\end{array}double f(double a, double x) {
double r94422 = a;
double r94423 = x;
double r94424 = r94422 * r94423;
double r94425 = exp(r94424);
double r94426 = 1.0;
double r94427 = r94425 - r94426;
return r94427;
}
double f(double a, double x) {
double r94428 = a;
double r94429 = x;
double r94430 = r94428 * r94429;
double r94431 = -1.2198011408828068e-14;
bool r94432 = r94430 <= r94431;
double r94433 = 2.0;
double r94434 = r94429 * r94428;
double r94435 = r94433 * r94434;
double r94436 = exp(r94435);
double r94437 = 1.0;
double r94438 = r94437 * r94437;
double r94439 = r94436 - r94438;
double r94440 = exp(r94434);
double r94441 = r94437 + r94440;
double r94442 = r94439 / r94441;
double r94443 = 3.077413979503786e-19;
bool r94444 = r94430 <= r94443;
double r94445 = 0.16666666666666666;
double r94446 = 3.0;
double r94447 = pow(r94428, r94446);
double r94448 = pow(r94429, r94446);
double r94449 = r94447 * r94448;
double r94450 = 0.5;
double r94451 = pow(r94428, r94433);
double r94452 = r94450 * r94451;
double r94453 = r94452 * r94429;
double r94454 = r94428 + r94453;
double r94455 = r94429 * r94454;
double r94456 = fma(r94445, r94449, r94455);
double r94457 = exp(r94430);
double r94458 = r94457 - r94437;
double r94459 = cbrt(r94458);
double r94460 = r94459 * r94459;
double r94461 = r94460 * r94459;
double r94462 = cbrt(r94461);
double r94463 = cbrt(r94462);
double r94464 = cbrt(r94457);
double r94465 = r94464 * r94464;
double r94466 = -r94437;
double r94467 = fma(r94465, r94464, r94466);
double r94468 = cbrt(r94467);
double r94469 = cbrt(r94468);
double r94470 = r94463 * r94469;
double r94471 = cbrt(r94459);
double r94472 = r94470 * r94471;
double r94473 = r94460 * r94472;
double r94474 = r94444 ? r94456 : r94473;
double r94475 = r94432 ? r94442 : r94474;
return r94475;
}




Bits error versus a




Bits error versus x
| Original | 28.9 |
|---|---|
| Target | 0.2 |
| Herbie | 8.9 |
if (* a x) < -1.2198011408828068e-14Initial program 1.0
rmApplied flip--1.0
Simplified1.0
Simplified1.0
if -1.2198011408828068e-14 < (* a x) < 3.077413979503786e-19Initial program 44.7
Taylor expanded around 0 12.6
Simplified12.6
if 3.077413979503786e-19 < (* a x) Initial program 28.0
rmApplied add-cube-cbrt28.1
rmApplied add-cube-cbrt28.1
rmApplied add-cube-cbrt28.1
rmApplied add-cube-cbrt28.9
Applied fma-neg29.0
Final simplification8.9
herbie shell --seed 2020047 +o rules:numerics
(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))