\frac{\left(1.0 + \frac{1.0}{\varepsilon}\right) \cdot e^{-\left(1.0 - \varepsilon\right) \cdot x} - \left(\frac{1.0}{\varepsilon} - 1.0\right) \cdot e^{-\left(1.0 + \varepsilon\right) \cdot x}}{2.0}\begin{array}{l}
\mathbf{if}\;x \le 30.43326508471591:\\
\;\;\;\;\frac{\sqrt[3]{\left(2.0 + \left(x \cdot x\right) \cdot \left(0.6666666666666667 \cdot x - 1.0\right)\right) \cdot \left(\left(2.0 + \left(x \cdot x\right) \cdot \left(0.6666666666666667 \cdot x - 1.0\right)\right) \cdot \left(2.0 + \left(x \cdot x\right) \cdot \left(0.6666666666666667 \cdot x - 1.0\right)\right)\right)}}{2.0}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(1.0 + \frac{1.0}{\varepsilon}\right) \cdot e^{\left(-x\right) \cdot \left(1.0 - \varepsilon\right)} - \left(\frac{1.0}{\varepsilon} - 1.0\right) \cdot {e}^{\left(\left(\varepsilon + 1.0\right) \cdot \left(-x\right)\right)}}{2.0}\\
\end{array}double f(double x, double eps) {
double r2574969 = 1.0;
double r2574970 = eps;
double r2574971 = r2574969 / r2574970;
double r2574972 = r2574969 + r2574971;
double r2574973 = r2574969 - r2574970;
double r2574974 = x;
double r2574975 = r2574973 * r2574974;
double r2574976 = -r2574975;
double r2574977 = exp(r2574976);
double r2574978 = r2574972 * r2574977;
double r2574979 = r2574971 - r2574969;
double r2574980 = r2574969 + r2574970;
double r2574981 = r2574980 * r2574974;
double r2574982 = -r2574981;
double r2574983 = exp(r2574982);
double r2574984 = r2574979 * r2574983;
double r2574985 = r2574978 - r2574984;
double r2574986 = 2.0;
double r2574987 = r2574985 / r2574986;
return r2574987;
}
double f(double x, double eps) {
double r2574988 = x;
double r2574989 = 30.43326508471591;
bool r2574990 = r2574988 <= r2574989;
double r2574991 = 2.0;
double r2574992 = r2574988 * r2574988;
double r2574993 = 0.6666666666666667;
double r2574994 = r2574993 * r2574988;
double r2574995 = 1.0;
double r2574996 = r2574994 - r2574995;
double r2574997 = r2574992 * r2574996;
double r2574998 = r2574991 + r2574997;
double r2574999 = r2574998 * r2574998;
double r2575000 = r2574998 * r2574999;
double r2575001 = cbrt(r2575000);
double r2575002 = r2575001 / r2574991;
double r2575003 = eps;
double r2575004 = r2574995 / r2575003;
double r2575005 = r2574995 + r2575004;
double r2575006 = -r2574988;
double r2575007 = r2574995 - r2575003;
double r2575008 = r2575006 * r2575007;
double r2575009 = exp(r2575008);
double r2575010 = r2575005 * r2575009;
double r2575011 = r2575004 - r2574995;
double r2575012 = exp(1.0);
double r2575013 = r2575003 + r2574995;
double r2575014 = r2575013 * r2575006;
double r2575015 = pow(r2575012, r2575014);
double r2575016 = r2575011 * r2575015;
double r2575017 = r2575010 - r2575016;
double r2575018 = r2575017 / r2574991;
double r2575019 = r2574990 ? r2575002 : r2575018;
return r2575019;
}



Bits error versus x



Bits error versus eps
Results
if x < 30.43326508471591Initial program 37.8
Taylor expanded around 0 1.1
Simplified1.1
rmApplied insert-posit161.2
rmApplied add-cbrt-cube1.2
Simplified1.1
if 30.43326508471591 < x Initial program 0.3
rmApplied *-un-lft-identity0.3
Applied exp-prod0.3
Simplified0.3
Final simplification0.9
herbie shell --seed 2019165
(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))