\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 362.8291028480374507125816307961940765381:\\
\;\;\;\;\frac{\frac{\left(-1 \cdot 1\right) \cdot {x}^{4} + \left(0.6666666666666667406815349750104360282421 \cdot {x}^{3} + 2\right) \cdot \left(\left(\sqrt[3]{0.6666666666666667406815349750104360282421 \cdot {x}^{3}} \cdot \sqrt[3]{0.6666666666666667406815349750104360282421 \cdot {x}^{3}}\right) \cdot \sqrt[3]{0.6666666666666667406815349750104360282421 \cdot {x}^{3}} + 2\right)}{{x}^{2} \cdot \left(0.6666666666666667406815349750104360282421 \cdot x + 1\right) + 2}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot e^{-\left(1 - \varepsilon\right) \cdot x} - 1 \cdot \left(\frac{e^{-\left(x \cdot \varepsilon + 1 \cdot x\right)}}{\varepsilon} - e^{-\left(x \cdot \varepsilon + 1 \cdot x\right)}\right)}{2}\\
\end{array}double f(double x, double eps) {
double r35842 = 1.0;
double r35843 = eps;
double r35844 = r35842 / r35843;
double r35845 = r35842 + r35844;
double r35846 = r35842 - r35843;
double r35847 = x;
double r35848 = r35846 * r35847;
double r35849 = -r35848;
double r35850 = exp(r35849);
double r35851 = r35845 * r35850;
double r35852 = r35844 - r35842;
double r35853 = r35842 + r35843;
double r35854 = r35853 * r35847;
double r35855 = -r35854;
double r35856 = exp(r35855);
double r35857 = r35852 * r35856;
double r35858 = r35851 - r35857;
double r35859 = 2.0;
double r35860 = r35858 / r35859;
return r35860;
}
double f(double x, double eps) {
double r35861 = x;
double r35862 = 362.82910284803745;
bool r35863 = r35861 <= r35862;
double r35864 = 1.0;
double r35865 = r35864 * r35864;
double r35866 = -r35865;
double r35867 = 4.0;
double r35868 = pow(r35861, r35867);
double r35869 = r35866 * r35868;
double r35870 = 0.6666666666666667;
double r35871 = 3.0;
double r35872 = pow(r35861, r35871);
double r35873 = r35870 * r35872;
double r35874 = 2.0;
double r35875 = r35873 + r35874;
double r35876 = cbrt(r35873);
double r35877 = r35876 * r35876;
double r35878 = r35877 * r35876;
double r35879 = r35878 + r35874;
double r35880 = r35875 * r35879;
double r35881 = r35869 + r35880;
double r35882 = 2.0;
double r35883 = pow(r35861, r35882);
double r35884 = r35870 * r35861;
double r35885 = r35884 + r35864;
double r35886 = r35883 * r35885;
double r35887 = r35886 + r35874;
double r35888 = r35881 / r35887;
double r35889 = r35888 / r35874;
double r35890 = eps;
double r35891 = r35864 / r35890;
double r35892 = r35864 + r35891;
double r35893 = r35864 - r35890;
double r35894 = r35893 * r35861;
double r35895 = -r35894;
double r35896 = exp(r35895);
double r35897 = r35892 * r35896;
double r35898 = r35861 * r35890;
double r35899 = r35864 * r35861;
double r35900 = r35898 + r35899;
double r35901 = -r35900;
double r35902 = exp(r35901);
double r35903 = r35902 / r35890;
double r35904 = r35903 - r35902;
double r35905 = r35864 * r35904;
double r35906 = r35897 - r35905;
double r35907 = r35906 / r35874;
double r35908 = r35863 ? r35889 : r35907;
return r35908;
}



Bits error versus x



Bits error versus eps
Results
if x < 362.82910284803745Initial program 40.0
Taylor expanded around 0 1.3
rmApplied flip--1.3
Simplified1.3
Simplified1.3
rmApplied add-cube-cbrt1.3
if 362.82910284803745 < x Initial program 0.1
Taylor expanded around inf 0.1
Simplified0.1
Final simplification1.0
herbie shell --seed 2019297
(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))