\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 130.404033395790208:\\
\;\;\;\;\frac{\mathsf{fma}\left({x}^{3}, 0.66666666666666674, 2 - 1 \cdot {x}^{2}\right)}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot e^{-\left(1 - \varepsilon\right) \cdot x} - 1 \cdot \left(\frac{e^{-\left(x \cdot \varepsilon + 1 \cdot x\right)}}{\varepsilon} - \frac{1}{e^{\mathsf{fma}\left(x, \varepsilon, 1 \cdot x\right)}}\right)}{2}\\
\end{array}double f(double x, double eps) {
double r56306 = 1.0;
double r56307 = eps;
double r56308 = r56306 / r56307;
double r56309 = r56306 + r56308;
double r56310 = r56306 - r56307;
double r56311 = x;
double r56312 = r56310 * r56311;
double r56313 = -r56312;
double r56314 = exp(r56313);
double r56315 = r56309 * r56314;
double r56316 = r56308 - r56306;
double r56317 = r56306 + r56307;
double r56318 = r56317 * r56311;
double r56319 = -r56318;
double r56320 = exp(r56319);
double r56321 = r56316 * r56320;
double r56322 = r56315 - r56321;
double r56323 = 2.0;
double r56324 = r56322 / r56323;
return r56324;
}
double f(double x, double eps) {
double r56325 = x;
double r56326 = 130.4040333957902;
bool r56327 = r56325 <= r56326;
double r56328 = 3.0;
double r56329 = pow(r56325, r56328);
double r56330 = 0.6666666666666667;
double r56331 = 2.0;
double r56332 = 1.0;
double r56333 = 2.0;
double r56334 = pow(r56325, r56333);
double r56335 = r56332 * r56334;
double r56336 = r56331 - r56335;
double r56337 = fma(r56329, r56330, r56336);
double r56338 = r56337 / r56331;
double r56339 = eps;
double r56340 = r56332 / r56339;
double r56341 = r56332 + r56340;
double r56342 = r56332 - r56339;
double r56343 = r56342 * r56325;
double r56344 = -r56343;
double r56345 = exp(r56344);
double r56346 = r56341 * r56345;
double r56347 = r56325 * r56339;
double r56348 = r56332 * r56325;
double r56349 = r56347 + r56348;
double r56350 = -r56349;
double r56351 = exp(r56350);
double r56352 = r56351 / r56339;
double r56353 = 1.0;
double r56354 = fma(r56325, r56339, r56348);
double r56355 = exp(r56354);
double r56356 = r56353 / r56355;
double r56357 = r56352 - r56356;
double r56358 = r56332 * r56357;
double r56359 = r56346 - r56358;
double r56360 = r56359 / r56331;
double r56361 = r56327 ? r56338 : r56360;
return r56361;
}



Bits error versus x



Bits error versus eps
if x < 130.4040333957902Initial program 38.8
Taylor expanded around 0 1.4
Simplified1.4
if 130.4040333957902 < x Initial program 0.2
Taylor expanded around inf 0.2
Simplified0.2
Final simplification1.1
herbie shell --seed 2020060 +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))