e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -6.883670130696454110254072018681462839622 \cdot 10^{-19} \lor \neg \left(a \cdot x \le 5.145272381710981521082629097103889956475 \cdot 10^{-33}\right):\\
\;\;\;\;\mathsf{fma}\left(\sqrt{\left(\left(\sqrt[3]{1} \cdot e^{\frac{1}{3} \cdot \left(a \cdot x\right)}\right) \cdot \sqrt[3]{e^{a \cdot x}}\right) \cdot \sqrt[3]{e^{a \cdot x}}}, e^{\frac{1}{2} \cdot \left(a \cdot x\right)}, -1\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{2}, {a}^{2} \cdot {x}^{2}, \mathsf{fma}\left(\frac{1}{6}, {a}^{3} \cdot {x}^{3}, a \cdot x\right)\right)\\
\end{array}double f(double a, double x) {
double r108735 = a;
double r108736 = x;
double r108737 = r108735 * r108736;
double r108738 = exp(r108737);
double r108739 = 1.0;
double r108740 = r108738 - r108739;
return r108740;
}
double f(double a, double x) {
double r108741 = a;
double r108742 = x;
double r108743 = r108741 * r108742;
double r108744 = -6.883670130696454e-19;
bool r108745 = r108743 <= r108744;
double r108746 = 5.1452723817109815e-33;
bool r108747 = r108743 <= r108746;
double r108748 = !r108747;
bool r108749 = r108745 || r108748;
double r108750 = 1.0;
double r108751 = cbrt(r108750);
double r108752 = 0.3333333333333333;
double r108753 = r108752 * r108743;
double r108754 = exp(r108753);
double r108755 = r108751 * r108754;
double r108756 = exp(r108743);
double r108757 = cbrt(r108756);
double r108758 = r108755 * r108757;
double r108759 = r108758 * r108757;
double r108760 = sqrt(r108759);
double r108761 = 0.5;
double r108762 = r108761 * r108743;
double r108763 = exp(r108762);
double r108764 = 1.0;
double r108765 = -r108764;
double r108766 = fma(r108760, r108763, r108765);
double r108767 = 2.0;
double r108768 = pow(r108741, r108767);
double r108769 = pow(r108742, r108767);
double r108770 = r108768 * r108769;
double r108771 = 0.16666666666666666;
double r108772 = 3.0;
double r108773 = pow(r108741, r108772);
double r108774 = pow(r108742, r108772);
double r108775 = r108773 * r108774;
double r108776 = fma(r108771, r108775, r108743);
double r108777 = fma(r108761, r108770, r108776);
double r108778 = r108749 ? r108766 : r108777;
return r108778;
}




Bits error versus a




Bits error versus x
| Original | 29.7 |
|---|---|
| Target | 0.2 |
| Herbie | 9.8 |
if (* a x) < -6.883670130696454e-19 or 5.1452723817109815e-33 < (* a x) Initial program 5.2
rmApplied add-sqr-sqrt5.3
Applied fma-neg5.3
rmApplied add-exp-log5.3
Simplified5.3
rmApplied add-cube-cbrt5.4
rmApplied *-un-lft-identity5.4
Applied cbrt-prod5.4
Simplified5.3
if -6.883670130696454e-19 < (* a x) < 5.1452723817109815e-33Initial program 45.3
Taylor expanded around 0 12.6
Simplified12.6
Final simplification9.8
herbie shell --seed 2019353 +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))