\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 356.3553531120810475840698927640914916992:\\
\;\;\;\;\frac{e^{\mathsf{expm1}\left(\mathsf{log1p}\left(\log \left(\mathsf{fma}\left(0.6666666666666667406815349750104360282421, {x}^{3}, 2\right) - 1 \cdot {x}^{2}\right)\right)\right)}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt{\frac{1 + \frac{1}{\varepsilon}}{e^{\left(1 - \varepsilon\right) \cdot x}} - \frac{\frac{1}{\varepsilon} - 1}{e^{\left(1 + \varepsilon\right) \cdot x}}} \cdot \sqrt{\frac{1 + \frac{1}{\varepsilon}}{e^{\left(1 - \varepsilon\right) \cdot x}} - \frac{\frac{1}{\varepsilon} - 1}{e^{\left(1 + \varepsilon\right) \cdot x}}}}{2}\\
\end{array}double f(double x, double eps) {
double r47867 = 1.0;
double r47868 = eps;
double r47869 = r47867 / r47868;
double r47870 = r47867 + r47869;
double r47871 = r47867 - r47868;
double r47872 = x;
double r47873 = r47871 * r47872;
double r47874 = -r47873;
double r47875 = exp(r47874);
double r47876 = r47870 * r47875;
double r47877 = r47869 - r47867;
double r47878 = r47867 + r47868;
double r47879 = r47878 * r47872;
double r47880 = -r47879;
double r47881 = exp(r47880);
double r47882 = r47877 * r47881;
double r47883 = r47876 - r47882;
double r47884 = 2.0;
double r47885 = r47883 / r47884;
return r47885;
}
double f(double x, double eps) {
double r47886 = x;
double r47887 = 356.35535311208105;
bool r47888 = r47886 <= r47887;
double r47889 = 0.6666666666666667;
double r47890 = 3.0;
double r47891 = pow(r47886, r47890);
double r47892 = 2.0;
double r47893 = fma(r47889, r47891, r47892);
double r47894 = 1.0;
double r47895 = 2.0;
double r47896 = pow(r47886, r47895);
double r47897 = r47894 * r47896;
double r47898 = r47893 - r47897;
double r47899 = log(r47898);
double r47900 = log1p(r47899);
double r47901 = expm1(r47900);
double r47902 = exp(r47901);
double r47903 = r47902 / r47892;
double r47904 = eps;
double r47905 = r47894 / r47904;
double r47906 = r47894 + r47905;
double r47907 = r47894 - r47904;
double r47908 = r47907 * r47886;
double r47909 = exp(r47908);
double r47910 = r47906 / r47909;
double r47911 = r47905 - r47894;
double r47912 = r47894 + r47904;
double r47913 = r47912 * r47886;
double r47914 = exp(r47913);
double r47915 = r47911 / r47914;
double r47916 = r47910 - r47915;
double r47917 = sqrt(r47916);
double r47918 = r47917 * r47917;
double r47919 = r47918 / r47892;
double r47920 = r47888 ? r47903 : r47919;
return r47920;
}



Bits error versus x



Bits error versus eps
if x < 356.35535311208105Initial program 39.1
Simplified39.1
Taylor expanded around 0 1.4
Simplified1.4
rmApplied add-exp-log1.4
rmApplied expm1-log1p-u1.4
if 356.35535311208105 < x Initial program 0.1
Simplified0.1
rmApplied add-sqr-sqrt0.1
Final simplification1.1
herbie shell --seed 2019323 +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))