\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 45.88594712019421706372668268159031867981:\\
\;\;\;\;\frac{0.6666666666666667406815349750104360282421 \cdot {x}^{3} + \left(2 - 1 \cdot {x}^{2}\right)}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{fma}\left(1 + \frac{1}{\varepsilon}, e^{-\left(1 - \varepsilon\right) \cdot x}, -\frac{\frac{1}{\varepsilon} - 1}{e^{\left(1 + \varepsilon\right) \cdot x}}\right)}{2}\\
\end{array}double f(double x, double eps) {
double r47887 = 1.0;
double r47888 = eps;
double r47889 = r47887 / r47888;
double r47890 = r47887 + r47889;
double r47891 = r47887 - r47888;
double r47892 = x;
double r47893 = r47891 * r47892;
double r47894 = -r47893;
double r47895 = exp(r47894);
double r47896 = r47890 * r47895;
double r47897 = r47889 - r47887;
double r47898 = r47887 + r47888;
double r47899 = r47898 * r47892;
double r47900 = -r47899;
double r47901 = exp(r47900);
double r47902 = r47897 * r47901;
double r47903 = r47896 - r47902;
double r47904 = 2.0;
double r47905 = r47903 / r47904;
return r47905;
}
double f(double x, double eps) {
double r47906 = x;
double r47907 = 45.88594712019422;
bool r47908 = r47906 <= r47907;
double r47909 = 0.6666666666666667;
double r47910 = 3.0;
double r47911 = pow(r47906, r47910);
double r47912 = r47909 * r47911;
double r47913 = 2.0;
double r47914 = 1.0;
double r47915 = 2.0;
double r47916 = pow(r47906, r47915);
double r47917 = r47914 * r47916;
double r47918 = r47913 - r47917;
double r47919 = r47912 + r47918;
double r47920 = r47919 / r47913;
double r47921 = eps;
double r47922 = r47914 / r47921;
double r47923 = r47914 + r47922;
double r47924 = r47914 - r47921;
double r47925 = r47924 * r47906;
double r47926 = -r47925;
double r47927 = exp(r47926);
double r47928 = r47922 - r47914;
double r47929 = r47914 + r47921;
double r47930 = r47929 * r47906;
double r47931 = exp(r47930);
double r47932 = r47928 / r47931;
double r47933 = -r47932;
double r47934 = fma(r47923, r47927, r47933);
double r47935 = r47934 / r47913;
double r47936 = r47908 ? r47920 : r47935;
return r47936;
}



Bits error versus x



Bits error versus eps
if x < 45.88594712019422Initial program 39.8
Taylor expanded around 0 1.0
Simplified1.0
rmApplied fma-udef1.0
Applied associate--l+1.0
if 45.88594712019422 < x Initial program 0.3
rmApplied fma-neg0.3
Simplified0.3
Final simplification0.8
herbie shell --seed 2019326 +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))