\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 347.893050734993551:\\
\;\;\;\;\frac{\mathsf{fma}\left({x}^{3}, 0.66666666666666674, 2 - 1 \cdot {x}^{2}\right)}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{fma}\left(1, \frac{e^{x \cdot \varepsilon - 1 \cdot x}}{\varepsilon}, 1 \cdot e^{x \cdot \varepsilon - 1 \cdot x}\right) - \left(\frac{1}{\varepsilon} - 1\right) \cdot e^{-\left(1 + \varepsilon\right) \cdot x}}{2}\\
\end{array}double f(double x, double eps) {
double r45804 = 1.0;
double r45805 = eps;
double r45806 = r45804 / r45805;
double r45807 = r45804 + r45806;
double r45808 = r45804 - r45805;
double r45809 = x;
double r45810 = r45808 * r45809;
double r45811 = -r45810;
double r45812 = exp(r45811);
double r45813 = r45807 * r45812;
double r45814 = r45806 - r45804;
double r45815 = r45804 + r45805;
double r45816 = r45815 * r45809;
double r45817 = -r45816;
double r45818 = exp(r45817);
double r45819 = r45814 * r45818;
double r45820 = r45813 - r45819;
double r45821 = 2.0;
double r45822 = r45820 / r45821;
return r45822;
}
double f(double x, double eps) {
double r45823 = x;
double r45824 = 347.89305073499355;
bool r45825 = r45823 <= r45824;
double r45826 = 3.0;
double r45827 = pow(r45823, r45826);
double r45828 = 0.6666666666666667;
double r45829 = 2.0;
double r45830 = 1.0;
double r45831 = 2.0;
double r45832 = pow(r45823, r45831);
double r45833 = r45830 * r45832;
double r45834 = r45829 - r45833;
double r45835 = fma(r45827, r45828, r45834);
double r45836 = r45835 / r45829;
double r45837 = eps;
double r45838 = r45823 * r45837;
double r45839 = r45830 * r45823;
double r45840 = r45838 - r45839;
double r45841 = exp(r45840);
double r45842 = r45841 / r45837;
double r45843 = r45830 * r45841;
double r45844 = fma(r45830, r45842, r45843);
double r45845 = r45830 / r45837;
double r45846 = r45845 - r45830;
double r45847 = r45830 + r45837;
double r45848 = r45847 * r45823;
double r45849 = -r45848;
double r45850 = exp(r45849);
double r45851 = r45846 * r45850;
double r45852 = r45844 - r45851;
double r45853 = r45852 / r45829;
double r45854 = r45825 ? r45836 : r45853;
return r45854;
}



Bits error versus x



Bits error versus eps
if x < 347.89305073499355Initial program 38.7
Taylor expanded around 0 1.2
Simplified1.2
if 347.89305073499355 < x Initial program 0.0
Taylor expanded around inf 0.0
Simplified0.0
Final simplification0.9
herbie shell --seed 2020081 +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))