\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 2.80482577976084757:\\
\;\;\;\;\frac{\frac{\left(2.666666666666667 \cdot {x}^{3} + 4\right) - 1 \cdot {x}^{4}}{{x}^{2} \cdot \left(0.66666666666666674 \cdot x + 1\right) + 2}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot e^{-\left(1 - \varepsilon\right) \cdot x} - \left(\frac{1}{\varepsilon} - 1\right) \cdot {e}^{\left(-\left(1 + \varepsilon\right) \cdot x\right)}}{2}\\
\end{array}double f(double x, double eps) {
double r42001 = 1.0;
double r42002 = eps;
double r42003 = r42001 / r42002;
double r42004 = r42001 + r42003;
double r42005 = r42001 - r42002;
double r42006 = x;
double r42007 = r42005 * r42006;
double r42008 = -r42007;
double r42009 = exp(r42008);
double r42010 = r42004 * r42009;
double r42011 = r42003 - r42001;
double r42012 = r42001 + r42002;
double r42013 = r42012 * r42006;
double r42014 = -r42013;
double r42015 = exp(r42014);
double r42016 = r42011 * r42015;
double r42017 = r42010 - r42016;
double r42018 = 2.0;
double r42019 = r42017 / r42018;
return r42019;
}
double f(double x, double eps) {
double r42020 = x;
double r42021 = 2.8048257797608476;
bool r42022 = r42020 <= r42021;
double r42023 = 2.666666666666667;
double r42024 = 3.0;
double r42025 = pow(r42020, r42024);
double r42026 = r42023 * r42025;
double r42027 = 4.0;
double r42028 = r42026 + r42027;
double r42029 = 1.0;
double r42030 = 4.0;
double r42031 = pow(r42020, r42030);
double r42032 = r42029 * r42031;
double r42033 = r42028 - r42032;
double r42034 = 2.0;
double r42035 = pow(r42020, r42034);
double r42036 = 0.6666666666666667;
double r42037 = r42036 * r42020;
double r42038 = r42037 + r42029;
double r42039 = r42035 * r42038;
double r42040 = 2.0;
double r42041 = r42039 + r42040;
double r42042 = r42033 / r42041;
double r42043 = r42042 / r42040;
double r42044 = eps;
double r42045 = r42029 / r42044;
double r42046 = r42029 + r42045;
double r42047 = r42029 - r42044;
double r42048 = r42047 * r42020;
double r42049 = -r42048;
double r42050 = exp(r42049);
double r42051 = r42046 * r42050;
double r42052 = r42045 - r42029;
double r42053 = exp(1.0);
double r42054 = r42029 + r42044;
double r42055 = r42054 * r42020;
double r42056 = -r42055;
double r42057 = pow(r42053, r42056);
double r42058 = r42052 * r42057;
double r42059 = r42051 - r42058;
double r42060 = r42059 / r42040;
double r42061 = r42022 ? r42043 : r42060;
return r42061;
}



Bits error versus x



Bits error versus eps
Results
if x < 2.8048257797608476Initial program 39.5
Taylor expanded around 0 1.1
rmApplied flip--1.1
Simplified1.1
Simplified1.1
Taylor expanded around 0 1.1
if 2.8048257797608476 < x Initial program 0.4
rmApplied *-un-lft-identity0.4
Applied exp-prod0.4
Simplified0.4
Final simplification0.9
herbie shell --seed 2020036
(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))