e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -6.7079265592921415 \cdot 10^{-14}:\\
\;\;\;\;\left(\sqrt[3]{\sqrt{e^{a \cdot x}} + \sqrt{1}} \cdot \left(\sqrt[3]{\frac{{\left(\sqrt{e^{a \cdot x}}\right)}^{3} - {\left(\sqrt{1}\right)}^{3}}{e^{a \cdot x} + \mathsf{fma}\left(\sqrt{1}, \sqrt{e^{a \cdot x}}, 1\right)}} \cdot \sqrt[3]{e^{a \cdot x} - 1}\right)\right) \cdot \sqrt[3]{e^{a \cdot x} - 1}\\
\mathbf{elif}\;a \cdot x \le 1.91419640354660377 \cdot 10^{-41}:\\
\;\;\;\;\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)\\
\mathbf{else}:\\
\;\;\;\;\left(\sqrt[3]{\sqrt{e^{a \cdot x}} + \sqrt{1}} \cdot \left(\sqrt[3]{\mathsf{fma}\left(\sqrt{\sqrt[3]{e^{a \cdot x}} \cdot \sqrt[3]{e^{a \cdot x}}}, \sqrt{\sqrt[3]{e^{a \cdot x}}}, -\sqrt{1}\right)} \cdot \sqrt[3]{e^{a \cdot x} - 1}\right)\right) \cdot \sqrt[3]{e^{a \cdot x} - 1}\\
\end{array}double f(double a, double x) {
double r143588 = a;
double r143589 = x;
double r143590 = r143588 * r143589;
double r143591 = exp(r143590);
double r143592 = 1.0;
double r143593 = r143591 - r143592;
return r143593;
}
double f(double a, double x) {
double r143594 = a;
double r143595 = x;
double r143596 = r143594 * r143595;
double r143597 = -6.707926559292141e-14;
bool r143598 = r143596 <= r143597;
double r143599 = exp(r143596);
double r143600 = sqrt(r143599);
double r143601 = 1.0;
double r143602 = sqrt(r143601);
double r143603 = r143600 + r143602;
double r143604 = cbrt(r143603);
double r143605 = 3.0;
double r143606 = pow(r143600, r143605);
double r143607 = pow(r143602, r143605);
double r143608 = r143606 - r143607;
double r143609 = fma(r143602, r143600, r143601);
double r143610 = r143599 + r143609;
double r143611 = r143608 / r143610;
double r143612 = cbrt(r143611);
double r143613 = r143599 - r143601;
double r143614 = cbrt(r143613);
double r143615 = r143612 * r143614;
double r143616 = r143604 * r143615;
double r143617 = r143616 * r143614;
double r143618 = 1.9141964035466038e-41;
bool r143619 = r143596 <= r143618;
double r143620 = 0.5;
double r143621 = 2.0;
double r143622 = pow(r143594, r143621);
double r143623 = pow(r143595, r143621);
double r143624 = r143622 * r143623;
double r143625 = 0.16666666666666666;
double r143626 = pow(r143594, r143605);
double r143627 = pow(r143595, r143605);
double r143628 = r143626 * r143627;
double r143629 = fma(r143625, r143628, r143596);
double r143630 = fma(r143620, r143624, r143629);
double r143631 = cbrt(r143599);
double r143632 = r143631 * r143631;
double r143633 = sqrt(r143632);
double r143634 = sqrt(r143631);
double r143635 = -r143602;
double r143636 = fma(r143633, r143634, r143635);
double r143637 = cbrt(r143636);
double r143638 = r143637 * r143614;
double r143639 = r143604 * r143638;
double r143640 = r143639 * r143614;
double r143641 = r143619 ? r143630 : r143640;
double r143642 = r143598 ? r143617 : r143641;
return r143642;
}




Bits error versus a




Bits error versus x
| Original | 30.0 |
|---|---|
| Target | 0.2 |
| Herbie | 10.1 |
if (* a x) < -6.707926559292141e-14Initial program 0.8
rmApplied add-cube-cbrt0.8
rmApplied add-sqr-sqrt0.8
Applied add-sqr-sqrt0.8
Applied difference-of-squares0.8
Applied cbrt-prod0.8
Applied associate-*l*0.8
rmApplied flip3--0.8
Simplified0.8
if -6.707926559292141e-14 < (* a x) < 1.9141964035466038e-41Initial program 44.7
Taylor expanded around 0 12.5
Simplified12.5
if 1.9141964035466038e-41 < (* a x) Initial program 44.3
rmApplied add-cube-cbrt44.3
rmApplied add-sqr-sqrt44.3
Applied add-sqr-sqrt44.4
Applied difference-of-squares44.4
Applied cbrt-prod44.4
Applied associate-*l*44.4
rmApplied add-cube-cbrt44.6
Applied sqrt-prod44.6
Applied fma-neg44.6
Final simplification10.1
herbie shell --seed 2020062 +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))