\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 2.2371703346309433:\\
\;\;\;\;\frac{\left(\left(1 - 0.5 \cdot {x}^{2}\right) + 0.33333333333333337 \cdot {x}^{3}\right) \cdot \left(\left(1 + 0.5 \cdot {x}^{2}\right) + 0.33333333333333337 \cdot {x}^{3}\right)}{\left(1 + 0.5 \cdot {x}^{2}\right) + 0.33333333333333337 \cdot {x}^{3}}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{\frac{1 + \frac{1}{\varepsilon}}{e^{\left(1 - \varepsilon\right) \cdot x}}}{2} - \frac{\frac{\frac{1}{\varepsilon}}{e^{\left(1 + \varepsilon\right) \cdot x}}}{2}\right) + \frac{\frac{1}{e^{\left(1 + \varepsilon\right) \cdot x}}}{2}\\
\end{array}double f(double x, double eps) {
double r43960 = 1.0;
double r43961 = eps;
double r43962 = r43960 / r43961;
double r43963 = r43960 + r43962;
double r43964 = r43960 - r43961;
double r43965 = x;
double r43966 = r43964 * r43965;
double r43967 = -r43966;
double r43968 = exp(r43967);
double r43969 = r43963 * r43968;
double r43970 = r43962 - r43960;
double r43971 = r43960 + r43961;
double r43972 = r43971 * r43965;
double r43973 = -r43972;
double r43974 = exp(r43973);
double r43975 = r43970 * r43974;
double r43976 = r43969 - r43975;
double r43977 = 2.0;
double r43978 = r43976 / r43977;
return r43978;
}
double f(double x, double eps) {
double r43979 = x;
double r43980 = 2.2371703346309433;
bool r43981 = r43979 <= r43980;
double r43982 = 1.0;
double r43983 = 0.5;
double r43984 = 2.0;
double r43985 = pow(r43979, r43984);
double r43986 = r43983 * r43985;
double r43987 = r43982 - r43986;
double r43988 = 0.33333333333333337;
double r43989 = 3.0;
double r43990 = pow(r43979, r43989);
double r43991 = r43988 * r43990;
double r43992 = r43987 + r43991;
double r43993 = r43982 + r43986;
double r43994 = r43993 + r43991;
double r43995 = r43992 * r43994;
double r43996 = r43995 / r43994;
double r43997 = eps;
double r43998 = r43982 / r43997;
double r43999 = r43982 + r43998;
double r44000 = r43982 - r43997;
double r44001 = r44000 * r43979;
double r44002 = exp(r44001);
double r44003 = r43999 / r44002;
double r44004 = 2.0;
double r44005 = r44003 / r44004;
double r44006 = r43982 + r43997;
double r44007 = r44006 * r43979;
double r44008 = exp(r44007);
double r44009 = r43998 / r44008;
double r44010 = r44009 / r44004;
double r44011 = r44005 - r44010;
double r44012 = r43982 / r44008;
double r44013 = r44012 / r44004;
double r44014 = r44011 + r44013;
double r44015 = r43981 ? r43996 : r44014;
return r44015;
}



Bits error versus x



Bits error versus eps
Results
if x < 2.2371703346309433Initial program 39.4
Simplified39.4
Taylor expanded around 0 1.4
rmApplied add-cube-cbrt1.4
Applied unpow-prod-down1.4
Applied associate-*r*1.4
Simplified1.4
rmApplied flip--1.4
Simplified1.4
Simplified1.4
if 2.2371703346309433 < x Initial program 0.4
Simplified0.4
rmApplied div-sub0.4
Applied div-sub0.4
Applied associate--r-0.4
Final simplification1.2
herbie shell --seed 2020039
(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))