\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 100.79533204800275:\\
\;\;\;\;\frac{\mathsf{fma}\left(x \cdot x, \mathsf{log1p}\left(\left(\left(\mathsf{expm1}\left(\frac{2}{3} \cdot x\right)\right)\right)\right), 2 - x \cdot x\right)}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(\left(e^{\mathsf{fma}\left(x, \varepsilon, -x\right)} + e^{\mathsf{fma}\left(\varepsilon, -x, -x\right)}\right) + \frac{e^{\mathsf{fma}\left(x, \varepsilon, -x\right)}}{\varepsilon}\right) - \frac{e^{\mathsf{fma}\left(\varepsilon, -x, -x\right)}}{\varepsilon}}{2}\\
\end{array}double f(double x, double eps) {
double r1390927 = 1.0;
double r1390928 = eps;
double r1390929 = r1390927 / r1390928;
double r1390930 = r1390927 + r1390929;
double r1390931 = r1390927 - r1390928;
double r1390932 = x;
double r1390933 = r1390931 * r1390932;
double r1390934 = -r1390933;
double r1390935 = exp(r1390934);
double r1390936 = r1390930 * r1390935;
double r1390937 = r1390929 - r1390927;
double r1390938 = r1390927 + r1390928;
double r1390939 = r1390938 * r1390932;
double r1390940 = -r1390939;
double r1390941 = exp(r1390940);
double r1390942 = r1390937 * r1390941;
double r1390943 = r1390936 - r1390942;
double r1390944 = 2.0;
double r1390945 = r1390943 / r1390944;
return r1390945;
}
double f(double x, double eps) {
double r1390946 = x;
double r1390947 = 100.79533204800275;
bool r1390948 = r1390946 <= r1390947;
double r1390949 = r1390946 * r1390946;
double r1390950 = 0.6666666666666666;
double r1390951 = r1390950 * r1390946;
double r1390952 = expm1(r1390951);
double r1390953 = /* ERROR: no posit support in C */;
double r1390954 = /* ERROR: no posit support in C */;
double r1390955 = log1p(r1390954);
double r1390956 = 2.0;
double r1390957 = r1390956 - r1390949;
double r1390958 = fma(r1390949, r1390955, r1390957);
double r1390959 = r1390958 / r1390956;
double r1390960 = eps;
double r1390961 = -r1390946;
double r1390962 = fma(r1390946, r1390960, r1390961);
double r1390963 = exp(r1390962);
double r1390964 = fma(r1390960, r1390961, r1390961);
double r1390965 = exp(r1390964);
double r1390966 = r1390963 + r1390965;
double r1390967 = r1390963 / r1390960;
double r1390968 = r1390966 + r1390967;
double r1390969 = r1390965 / r1390960;
double r1390970 = r1390968 - r1390969;
double r1390971 = r1390970 / r1390956;
double r1390972 = r1390948 ? r1390959 : r1390971;
return r1390972;
}



Bits error versus x



Bits error versus eps
if x < 100.79533204800275Initial program 39.6
Simplified39.7
Taylor expanded around 0 1.3
Simplified1.3
rmApplied log1p-expm1-u1.3
rmApplied insert-posit161.4
if 100.79533204800275 < x Initial program 0.1
Simplified0.1
Taylor expanded around inf 0.1
Final simplification1.0
herbie shell --seed 2019151 +o rules:numerics
(FPCore (x eps)
:name "NMSE Section 6.1 mentioned, A"
(/ (- (* (+ 1 (/ 1 eps)) (exp (- (* (- 1 eps) x)))) (* (- (/ 1 eps) 1) (exp (- (* (+ 1 eps) x))))) 2))