\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 10.85972191525816654689151619095355272293:\\
\;\;\;\;\frac{\mathsf{log1p}\left(\mathsf{expm1}\left(\mathsf{fma}\left({x}^{2}, 0.6666666666666667406815349750104360282421 \cdot x - 1, 2\right)\right)\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(1 + \varepsilon\right) \cdot x}}{\varepsilon} - e^{-x \cdot \left(1 + \varepsilon\right)}\right)}{2}\\
\end{array}double f(double x, double eps) {
double r43299 = 1.0;
double r43300 = eps;
double r43301 = r43299 / r43300;
double r43302 = r43299 + r43301;
double r43303 = r43299 - r43300;
double r43304 = x;
double r43305 = r43303 * r43304;
double r43306 = -r43305;
double r43307 = exp(r43306);
double r43308 = r43302 * r43307;
double r43309 = r43301 - r43299;
double r43310 = r43299 + r43300;
double r43311 = r43310 * r43304;
double r43312 = -r43311;
double r43313 = exp(r43312);
double r43314 = r43309 * r43313;
double r43315 = r43308 - r43314;
double r43316 = 2.0;
double r43317 = r43315 / r43316;
return r43317;
}
double f(double x, double eps) {
double r43318 = x;
double r43319 = 10.859721915258167;
bool r43320 = r43318 <= r43319;
double r43321 = 2.0;
double r43322 = pow(r43318, r43321);
double r43323 = 0.6666666666666667;
double r43324 = r43323 * r43318;
double r43325 = 1.0;
double r43326 = r43324 - r43325;
double r43327 = 2.0;
double r43328 = fma(r43322, r43326, r43327);
double r43329 = expm1(r43328);
double r43330 = log1p(r43329);
double r43331 = r43330 / r43327;
double r43332 = eps;
double r43333 = r43325 / r43332;
double r43334 = r43325 + r43333;
double r43335 = r43325 - r43332;
double r43336 = r43335 * r43318;
double r43337 = -r43336;
double r43338 = exp(r43337);
double r43339 = r43334 * r43338;
double r43340 = r43325 + r43332;
double r43341 = r43340 * r43318;
double r43342 = -r43341;
double r43343 = exp(r43342);
double r43344 = r43343 / r43332;
double r43345 = r43318 * r43340;
double r43346 = -r43345;
double r43347 = exp(r43346);
double r43348 = r43344 - r43347;
double r43349 = r43325 * r43348;
double r43350 = r43339 - r43349;
double r43351 = r43350 / r43327;
double r43352 = r43320 ? r43331 : r43351;
return r43352;
}



Bits error versus x



Bits error versus eps
if x < 10.859721915258167Initial program 39.6
Taylor expanded around 0 1.3
Simplified1.3
rmApplied log1p-expm1-u1.3
Simplified1.3
if 10.859721915258167 < x Initial program 0.5
Taylor expanded around inf 0.5
Simplified0.5
Final simplification1.1
herbie shell --seed 2019303 +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))