e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -2.536076851648752571026748931861465062852 \cdot 10^{-20}:\\
\;\;\;\;\frac{\frac{\left(\sqrt[3]{\frac{e^{\left(a \cdot x\right) \cdot 12} - {\left({1}^{4}\right)}^{3}}{\left({1}^{8} + {\left(e^{a \cdot x}\right)}^{8}\right) + e^{\left(a \cdot x\right) \cdot 4} \cdot {1}^{4}}} \cdot \sqrt[3]{\frac{e^{\left(a \cdot x\right) \cdot 12} - {\left({1}^{4}\right)}^{3}}{\left({1}^{8} + {\left(e^{a \cdot x}\right)}^{8}\right) + e^{\left(a \cdot x\right) \cdot 4} \cdot {1}^{4}}}\right) \cdot \sqrt[3]{\frac{e^{\left(a \cdot x\right) \cdot 12} - {\left({1}^{4}\right)}^{3}}{\left({1}^{8} + {\left(e^{a \cdot x}\right)}^{8}\right) + e^{\left(a \cdot x\right) \cdot 4} \cdot {1}^{4}}}}{1 \cdot 1 + {\left(e^{2}\right)}^{\left(a \cdot x\right)}}}{e^{a \cdot x} + 1}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \left({a}^{2} \cdot {x}^{2}\right) + \left(0.1666666666666665186369300499791279435158 \cdot \left({a}^{3} \cdot {x}^{3}\right) + 1 \cdot \left(a \cdot x\right)\right)\\
\end{array}double f(double a, double x) {
double r98532 = a;
double r98533 = x;
double r98534 = r98532 * r98533;
double r98535 = exp(r98534);
double r98536 = 1.0;
double r98537 = r98535 - r98536;
return r98537;
}
double f(double a, double x) {
double r98538 = a;
double r98539 = x;
double r98540 = r98538 * r98539;
double r98541 = -2.5360768516487526e-20;
bool r98542 = r98540 <= r98541;
double r98543 = 12.0;
double r98544 = r98540 * r98543;
double r98545 = exp(r98544);
double r98546 = 1.0;
double r98547 = 4.0;
double r98548 = pow(r98546, r98547);
double r98549 = 3.0;
double r98550 = pow(r98548, r98549);
double r98551 = r98545 - r98550;
double r98552 = 8.0;
double r98553 = pow(r98546, r98552);
double r98554 = exp(r98540);
double r98555 = pow(r98554, r98552);
double r98556 = r98553 + r98555;
double r98557 = r98540 * r98547;
double r98558 = exp(r98557);
double r98559 = r98558 * r98548;
double r98560 = r98556 + r98559;
double r98561 = r98551 / r98560;
double r98562 = cbrt(r98561);
double r98563 = r98562 * r98562;
double r98564 = r98563 * r98562;
double r98565 = r98546 * r98546;
double r98566 = 2.0;
double r98567 = exp(r98566);
double r98568 = pow(r98567, r98540);
double r98569 = r98565 + r98568;
double r98570 = r98564 / r98569;
double r98571 = r98554 + r98546;
double r98572 = r98570 / r98571;
double r98573 = 0.5;
double r98574 = pow(r98538, r98566);
double r98575 = pow(r98539, r98566);
double r98576 = r98574 * r98575;
double r98577 = r98573 * r98576;
double r98578 = 0.16666666666666652;
double r98579 = pow(r98538, r98549);
double r98580 = pow(r98539, r98549);
double r98581 = r98579 * r98580;
double r98582 = r98578 * r98581;
double r98583 = r98546 * r98540;
double r98584 = r98582 + r98583;
double r98585 = r98577 + r98584;
double r98586 = r98542 ? r98572 : r98585;
return r98586;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.6 |
|---|---|
| Target | 0.2 |
| Herbie | 9.3 |
if (* a x) < -2.5360768516487526e-20Initial program 1.9
rmApplied flip--1.9
Simplified1.8
rmApplied flip--1.8
Simplified1.8
Simplified1.8
rmApplied flip3--1.8
Simplified1.8
rmApplied add-cube-cbrt1.8
Simplified1.7
Simplified1.7
if -2.5360768516487526e-20 < (* a x) Initial program 45.0
rmApplied flip--45.1
Simplified45.0
rmApplied flip--45.1
Simplified45.0
Simplified45.0
Taylor expanded around 0 13.6
Final simplification9.3
herbie shell --seed 2019209
(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))