\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 121.4869422814261525900292326696217060089:\\
\;\;\;\;\frac{2 + \left(x \cdot x\right) \cdot \left(0.6666666666666667406815349750104360282421 \cdot x - 1\right)}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{1}{\varepsilon} + 1, e^{\left(1 - \varepsilon\right) \cdot \left(-x\right)}, e^{\left(1 + \varepsilon\right) \cdot \left(-x\right)} \cdot \left(-\left(\frac{1}{\varepsilon} - 1\right)\right)\right)}{2}\\
\end{array}double f(double x, double eps) {
double r1617747 = 1.0;
double r1617748 = eps;
double r1617749 = r1617747 / r1617748;
double r1617750 = r1617747 + r1617749;
double r1617751 = r1617747 - r1617748;
double r1617752 = x;
double r1617753 = r1617751 * r1617752;
double r1617754 = -r1617753;
double r1617755 = exp(r1617754);
double r1617756 = r1617750 * r1617755;
double r1617757 = r1617749 - r1617747;
double r1617758 = r1617747 + r1617748;
double r1617759 = r1617758 * r1617752;
double r1617760 = -r1617759;
double r1617761 = exp(r1617760);
double r1617762 = r1617757 * r1617761;
double r1617763 = r1617756 - r1617762;
double r1617764 = 2.0;
double r1617765 = r1617763 / r1617764;
return r1617765;
}
double f(double x, double eps) {
double r1617766 = x;
double r1617767 = 121.48694228142615;
bool r1617768 = r1617766 <= r1617767;
double r1617769 = 2.0;
double r1617770 = r1617766 * r1617766;
double r1617771 = 0.6666666666666667;
double r1617772 = r1617771 * r1617766;
double r1617773 = 1.0;
double r1617774 = r1617772 - r1617773;
double r1617775 = r1617770 * r1617774;
double r1617776 = r1617769 + r1617775;
double r1617777 = r1617776 / r1617769;
double r1617778 = eps;
double r1617779 = r1617773 / r1617778;
double r1617780 = r1617779 + r1617773;
double r1617781 = r1617773 - r1617778;
double r1617782 = -r1617766;
double r1617783 = r1617781 * r1617782;
double r1617784 = exp(r1617783);
double r1617785 = r1617773 + r1617778;
double r1617786 = r1617785 * r1617782;
double r1617787 = exp(r1617786);
double r1617788 = r1617779 - r1617773;
double r1617789 = -r1617788;
double r1617790 = r1617787 * r1617789;
double r1617791 = fma(r1617780, r1617784, r1617790);
double r1617792 = r1617791 / r1617769;
double r1617793 = r1617768 ? r1617777 : r1617792;
return r1617793;
}



Bits error versus x



Bits error versus eps
if x < 121.48694228142615Initial program 39.5
Taylor expanded around 0 1.4
Simplified1.4
Taylor expanded around 0 1.4
Simplified1.4
if 121.48694228142615 < x Initial program 0.2
rmApplied fma-neg0.1
Final simplification1.1
herbie shell --seed 2019171 +o rules:numerics
(FPCore (x eps)
:name "NMSE Section 6.1 mentioned, A"
(/ (- (* (+ 1.0 (/ 1.0 eps)) (exp (- (* (- 1.0 eps) x)))) (* (- (/ 1.0 eps) 1.0) (exp (- (* (+ 1.0 eps) x))))) 2.0))