e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -173.653260833614780267453170381486415863:\\
\;\;\;\;\sqrt[3]{{\left({\left(e^{a}\right)}^{x} - 1\right)}^{3}}\\
\mathbf{else}:\\
\;\;\;\;x \cdot \mathsf{fma}\left(\frac{1}{2}, \left(a \cdot \left(\sqrt[3]{a} \cdot x\right)\right) \cdot {\left(\sqrt[3]{a}\right)}^{2}, a\right)\\
\end{array}double f(double a, double x) {
double r98688 = a;
double r98689 = x;
double r98690 = r98688 * r98689;
double r98691 = exp(r98690);
double r98692 = 1.0;
double r98693 = r98691 - r98692;
return r98693;
}
double f(double a, double x) {
double r98694 = a;
double r98695 = x;
double r98696 = r98694 * r98695;
double r98697 = -173.65326083361478;
bool r98698 = r98696 <= r98697;
double r98699 = exp(r98694);
double r98700 = pow(r98699, r98695);
double r98701 = 1.0;
double r98702 = r98700 - r98701;
double r98703 = 3.0;
double r98704 = pow(r98702, r98703);
double r98705 = cbrt(r98704);
double r98706 = 0.5;
double r98707 = cbrt(r98694);
double r98708 = r98707 * r98695;
double r98709 = r98694 * r98708;
double r98710 = 2.0;
double r98711 = pow(r98707, r98710);
double r98712 = r98709 * r98711;
double r98713 = fma(r98706, r98712, r98694);
double r98714 = r98695 * r98713;
double r98715 = r98698 ? r98705 : r98714;
return r98715;
}




Bits error versus a




Bits error versus x
| Original | 29.6 |
|---|---|
| Target | 0.2 |
| Herbie | 5.3 |
if (* a x) < -173.65326083361478Initial program 0
rmApplied add-cbrt-cube0
Simplified0
rmApplied add-log-exp14.3
Applied exp-to-pow14.3
if -173.65326083361478 < (* a x) Initial program 44.1
Taylor expanded around 0 14.4
Simplified11.7
Taylor expanded around 0 8.9
Simplified5.1
rmApplied add-cube-cbrt5.1
Applied unpow-prod-down5.1
Applied associate-*r*2.0
Simplified1.0
Final simplification5.3
herbie shell --seed 2019325 +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))