\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 23.630683338257473:\\
\;\;\;\;\frac{\mathsf{fma}\left(\left(\left(x \cdot x\right) \cdot x\right), \frac{2}{3}, 2\right) - x \cdot x}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(\frac{e^{\varepsilon \cdot x - x}}{\varepsilon} + e^{\varepsilon \cdot x - x}\right) + \left(e^{\left(-1 - \varepsilon\right) \cdot x} - \frac{e^{\left(-1 - \varepsilon\right) \cdot x}}{\varepsilon}\right)}{2}\\
\end{array}double f(double x, double eps) {
double r1517900 = 1.0;
double r1517901 = eps;
double r1517902 = r1517900 / r1517901;
double r1517903 = r1517900 + r1517902;
double r1517904 = r1517900 - r1517901;
double r1517905 = x;
double r1517906 = r1517904 * r1517905;
double r1517907 = -r1517906;
double r1517908 = exp(r1517907);
double r1517909 = r1517903 * r1517908;
double r1517910 = r1517902 - r1517900;
double r1517911 = r1517900 + r1517901;
double r1517912 = r1517911 * r1517905;
double r1517913 = -r1517912;
double r1517914 = exp(r1517913);
double r1517915 = r1517910 * r1517914;
double r1517916 = r1517909 - r1517915;
double r1517917 = 2.0;
double r1517918 = r1517916 / r1517917;
return r1517918;
}
double f(double x, double eps) {
double r1517919 = x;
double r1517920 = 23.630683338257473;
bool r1517921 = r1517919 <= r1517920;
double r1517922 = r1517919 * r1517919;
double r1517923 = r1517922 * r1517919;
double r1517924 = 0.6666666666666666;
double r1517925 = 2.0;
double r1517926 = fma(r1517923, r1517924, r1517925);
double r1517927 = r1517926 - r1517922;
double r1517928 = r1517927 / r1517925;
double r1517929 = eps;
double r1517930 = r1517929 * r1517919;
double r1517931 = r1517930 - r1517919;
double r1517932 = exp(r1517931);
double r1517933 = r1517932 / r1517929;
double r1517934 = r1517933 + r1517932;
double r1517935 = -1.0;
double r1517936 = r1517935 - r1517929;
double r1517937 = r1517936 * r1517919;
double r1517938 = exp(r1517937);
double r1517939 = r1517938 / r1517929;
double r1517940 = r1517938 - r1517939;
double r1517941 = r1517934 + r1517940;
double r1517942 = r1517941 / r1517925;
double r1517943 = r1517921 ? r1517928 : r1517942;
return r1517943;
}



Bits error versus x



Bits error versus eps
if x < 23.630683338257473Initial program 39.3
Simplified39.3
Taylor expanded around 0 1.0
Simplified1.0
Taylor expanded around 0 1.0
Simplified1.0
if 23.630683338257473 < x Initial program 0.2
Simplified0.2
Taylor expanded around inf 0.2
Final simplification0.8
herbie shell --seed 2019132 +o rules:numerics
(FPCore (x eps)
:name "NMSE Section 6.1 mentioned, A"
(/ (- (* (+ 1 (/ 1 eps)) (exp (- (* (- 1 eps) x)))) (* (- (/ 1 eps) 1) (exp (- (* (+ 1 eps) x))))) 2))