\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 83.34029148131637043661612551659345626831:\\
\;\;\;\;\frac{e^{\log \left(2 + \left({x}^{3} \cdot 0.6666666666666667406815349750104360282421 - 1 \cdot \left(x \cdot x\right)\right)\right)}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(\frac{1}{\varepsilon} + 1\right) \cdot e^{x \cdot \left(\varepsilon - 1\right)} - e^{\left(-\left(1 + \varepsilon\right)\right) \cdot x} \cdot \left(\frac{1}{\varepsilon} - 1\right)}{2}\\
\end{array}double f(double x, double eps) {
double r35582 = 1.0;
double r35583 = eps;
double r35584 = r35582 / r35583;
double r35585 = r35582 + r35584;
double r35586 = r35582 - r35583;
double r35587 = x;
double r35588 = r35586 * r35587;
double r35589 = -r35588;
double r35590 = exp(r35589);
double r35591 = r35585 * r35590;
double r35592 = r35584 - r35582;
double r35593 = r35582 + r35583;
double r35594 = r35593 * r35587;
double r35595 = -r35594;
double r35596 = exp(r35595);
double r35597 = r35592 * r35596;
double r35598 = r35591 - r35597;
double r35599 = 2.0;
double r35600 = r35598 / r35599;
return r35600;
}
double f(double x, double eps) {
double r35601 = x;
double r35602 = 83.34029148131637;
bool r35603 = r35601 <= r35602;
double r35604 = 2.0;
double r35605 = 3.0;
double r35606 = pow(r35601, r35605);
double r35607 = 0.6666666666666667;
double r35608 = r35606 * r35607;
double r35609 = 1.0;
double r35610 = r35601 * r35601;
double r35611 = r35609 * r35610;
double r35612 = r35608 - r35611;
double r35613 = r35604 + r35612;
double r35614 = log(r35613);
double r35615 = exp(r35614);
double r35616 = r35615 / r35604;
double r35617 = eps;
double r35618 = r35609 / r35617;
double r35619 = r35618 + r35609;
double r35620 = r35617 - r35609;
double r35621 = r35601 * r35620;
double r35622 = exp(r35621);
double r35623 = r35619 * r35622;
double r35624 = r35609 + r35617;
double r35625 = -r35624;
double r35626 = r35625 * r35601;
double r35627 = exp(r35626);
double r35628 = r35618 - r35609;
double r35629 = r35627 * r35628;
double r35630 = r35623 - r35629;
double r35631 = r35630 / r35604;
double r35632 = r35603 ? r35616 : r35631;
return r35632;
}



Bits error versus x



Bits error versus eps
Results
if x < 83.34029148131637Initial program 38.6
Taylor expanded around 0 1.3
Simplified1.3
rmApplied add-exp-log1.3
Simplified1.3
if 83.34029148131637 < x Initial program 0.2
Taylor expanded around inf 0.2
Simplified0.2
Final simplification1.0
herbie shell --seed 2019174
(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))