\frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot e^{-\left(1 - \varepsilon\right) \cdot x} - \left(\frac{1}{\varepsilon} - 1\right) \cdot e^{-\left(1 + \varepsilon\right) \cdot x}}{2}\begin{array}{l}
\mathbf{if}\;x \le 14.67295150394162028817390819313004612923:\\
\;\;\;\;\frac{\mathsf{fma}\left(0.6666666666666667406815349750104360282421, {x}^{3}, 2\right) - 1 \cdot {x}^{2}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot e^{-\left(1 - \varepsilon\right) \cdot x} - \left(\frac{1}{\varepsilon} - 1\right) \cdot {e}^{\left(-\left(1 + \varepsilon\right) \cdot x\right)}}{2}\\
\end{array}double f(double x, double eps) {
double r29809 = 1.0;
double r29810 = eps;
double r29811 = r29809 / r29810;
double r29812 = r29809 + r29811;
double r29813 = r29809 - r29810;
double r29814 = x;
double r29815 = r29813 * r29814;
double r29816 = -r29815;
double r29817 = exp(r29816);
double r29818 = r29812 * r29817;
double r29819 = r29811 - r29809;
double r29820 = r29809 + r29810;
double r29821 = r29820 * r29814;
double r29822 = -r29821;
double r29823 = exp(r29822);
double r29824 = r29819 * r29823;
double r29825 = r29818 - r29824;
double r29826 = 2.0;
double r29827 = r29825 / r29826;
return r29827;
}
double f(double x, double eps) {
double r29828 = x;
double r29829 = 14.67295150394162;
bool r29830 = r29828 <= r29829;
double r29831 = 0.6666666666666667;
double r29832 = 3.0;
double r29833 = pow(r29828, r29832);
double r29834 = 2.0;
double r29835 = fma(r29831, r29833, r29834);
double r29836 = 1.0;
double r29837 = 2.0;
double r29838 = pow(r29828, r29837);
double r29839 = r29836 * r29838;
double r29840 = r29835 - r29839;
double r29841 = r29840 / r29834;
double r29842 = eps;
double r29843 = r29836 / r29842;
double r29844 = r29836 + r29843;
double r29845 = r29836 - r29842;
double r29846 = r29845 * r29828;
double r29847 = -r29846;
double r29848 = exp(r29847);
double r29849 = r29844 * r29848;
double r29850 = r29843 - r29836;
double r29851 = exp(1.0);
double r29852 = r29836 + r29842;
double r29853 = r29852 * r29828;
double r29854 = -r29853;
double r29855 = pow(r29851, r29854);
double r29856 = r29850 * r29855;
double r29857 = r29849 - r29856;
double r29858 = r29857 / r29834;
double r29859 = r29830 ? r29841 : r29858;
return r29859;
}



Bits error versus x



Bits error versus eps
if x < 14.67295150394162Initial program 38.7
Taylor expanded around 0 1.1
Simplified1.1
rmApplied pow11.1
if 14.67295150394162 < x Initial program 0.4
rmApplied *-un-lft-identity0.4
Applied exp-prod0.4
Simplified0.4
Final simplification1.0
herbie shell --seed 2019235 +o rules:numerics
(FPCore (x eps)
:name "NMSE Section 6.1 mentioned, A"
:precision binary64
(/ (- (* (+ 1 (/ 1 eps)) (exp (- (* (- 1 eps) x)))) (* (- (/ 1 eps) 1) (exp (- (* (+ 1 eps) x))))) 2))