e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -1.329808343447672717064931896446979645784 \cdot 10^{-41}:\\
\;\;\;\;\frac{{\left(e^{a \cdot x}\right)}^{3} - {1}^{3}}{e^{a \cdot x} \cdot \left(e^{a \cdot x} + 1\right) + 1 \cdot 1}\\
\mathbf{elif}\;a \cdot x \le 1.844725457757833201712047371261704618537 \cdot 10^{-15}:\\
\;\;\;\;x \cdot \left(a + \left(\frac{1}{2} \cdot {a}^{2}\right) \cdot x\right) + \frac{1}{6} \cdot \left({a}^{3} \cdot {x}^{3}\right)\\
\mathbf{else}:\\
\;\;\;\;{\left(\sqrt{e^{a \cdot x}}\right)}^{\frac{5}{3}} \cdot \sqrt[3]{\sqrt{e^{a \cdot x}}} - 1\\
\end{array}double f(double a, double x) {
double r96756 = a;
double r96757 = x;
double r96758 = r96756 * r96757;
double r96759 = exp(r96758);
double r96760 = 1.0;
double r96761 = r96759 - r96760;
return r96761;
}
double f(double a, double x) {
double r96762 = a;
double r96763 = x;
double r96764 = r96762 * r96763;
double r96765 = -1.3298083434476727e-41;
bool r96766 = r96764 <= r96765;
double r96767 = exp(r96764);
double r96768 = 3.0;
double r96769 = pow(r96767, r96768);
double r96770 = 1.0;
double r96771 = pow(r96770, r96768);
double r96772 = r96769 - r96771;
double r96773 = r96767 + r96770;
double r96774 = r96767 * r96773;
double r96775 = r96770 * r96770;
double r96776 = r96774 + r96775;
double r96777 = r96772 / r96776;
double r96778 = 1.8447254577578332e-15;
bool r96779 = r96764 <= r96778;
double r96780 = 0.5;
double r96781 = 2.0;
double r96782 = pow(r96762, r96781);
double r96783 = r96780 * r96782;
double r96784 = r96783 * r96763;
double r96785 = r96762 + r96784;
double r96786 = r96763 * r96785;
double r96787 = 0.16666666666666666;
double r96788 = pow(r96762, r96768);
double r96789 = pow(r96763, r96768);
double r96790 = r96788 * r96789;
double r96791 = r96787 * r96790;
double r96792 = r96786 + r96791;
double r96793 = sqrt(r96767);
double r96794 = 1.6666666666666667;
double r96795 = pow(r96793, r96794);
double r96796 = cbrt(r96793);
double r96797 = r96795 * r96796;
double r96798 = r96797 - r96770;
double r96799 = r96779 ? r96792 : r96798;
double r96800 = r96766 ? r96777 : r96799;
return r96800;
}




Bits error versus a




Bits error versus x
Results
| Original | 28.8 |
|---|---|
| Target | 0.2 |
| Herbie | 9.2 |
if (* a x) < -1.3298083434476727e-41Initial program 5.0
rmApplied flip3--5.0
Simplified5.0
if -1.3298083434476727e-41 < (* a x) < 1.8447254577578332e-15Initial program 44.6
rmApplied add-sqr-sqrt44.6
rmApplied add-cube-cbrt44.6
Simplified44.6
Taylor expanded around 0 11.6
Simplified11.6
if 1.8447254577578332e-15 < (* a x) Initial program 19.5
rmApplied add-sqr-sqrt20.4
rmApplied add-cube-cbrt21.5
Applied associate-*r*21.5
Simplified22.2
rmApplied pow1/321.5
Applied pow-pow20.7
Simplified20.7
Final simplification9.2
herbie shell --seed 2019308
(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))