\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 19.56405840648583449592479155398905277252:\\
\;\;\;\;\frac{e^{\log \left(\mathsf{fma}\left({x}^{2}, 0.6666666666666667406815349750104360282421 \cdot x - 1, 2\right)\right)}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot e^{-\left(1 - \varepsilon\right) \cdot x} - \left(\frac{\frac{1}{e^{\left(1 + \varepsilon\right) \cdot x}}}{\varepsilon} - \frac{1}{e^{\left(1 + \varepsilon\right) \cdot x}}\right)}{2}\\
\end{array}double f(double x, double eps) {
double r100367 = 1.0;
double r100368 = eps;
double r100369 = r100367 / r100368;
double r100370 = r100367 + r100369;
double r100371 = r100367 - r100368;
double r100372 = x;
double r100373 = r100371 * r100372;
double r100374 = -r100373;
double r100375 = exp(r100374);
double r100376 = r100370 * r100375;
double r100377 = r100369 - r100367;
double r100378 = r100367 + r100368;
double r100379 = r100378 * r100372;
double r100380 = -r100379;
double r100381 = exp(r100380);
double r100382 = r100377 * r100381;
double r100383 = r100376 - r100382;
double r100384 = 2.0;
double r100385 = r100383 / r100384;
return r100385;
}
double f(double x, double eps) {
double r100386 = x;
double r100387 = 19.564058406485834;
bool r100388 = r100386 <= r100387;
double r100389 = 2.0;
double r100390 = pow(r100386, r100389);
double r100391 = 0.6666666666666667;
double r100392 = r100391 * r100386;
double r100393 = 1.0;
double r100394 = r100392 - r100393;
double r100395 = 2.0;
double r100396 = fma(r100390, r100394, r100395);
double r100397 = log(r100396);
double r100398 = exp(r100397);
double r100399 = r100398 / r100395;
double r100400 = eps;
double r100401 = r100393 / r100400;
double r100402 = r100393 + r100401;
double r100403 = r100393 - r100400;
double r100404 = r100403 * r100386;
double r100405 = -r100404;
double r100406 = exp(r100405);
double r100407 = r100402 * r100406;
double r100408 = r100393 + r100400;
double r100409 = r100408 * r100386;
double r100410 = exp(r100409);
double r100411 = r100393 / r100410;
double r100412 = r100411 / r100400;
double r100413 = r100412 - r100411;
double r100414 = r100407 - r100413;
double r100415 = r100414 / r100395;
double r100416 = r100388 ? r100399 : r100415;
return r100416;
}



Bits error versus x



Bits error versus eps
if x < 19.564058406485834Initial program 38.9
Taylor expanded around 0 1.1
Simplified1.1
rmApplied add-exp-log1.1
Simplified1.1
if 19.564058406485834 < x Initial program 0.4
Taylor expanded around inf 0.4
Simplified0.4
Final simplification0.9
herbie shell --seed 2019351 +o rules:numerics
(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))