Average Error: 29.5 → 0.9
Time: 16.8s
Precision: 64
\[\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}\]
\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;
}

Error

Bits error versus x

Bits error versus eps

Derivation

  1. Split input into 2 regimes
  2. if x < 19.564058406485834

    1. Initial program 38.9

      \[\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}\]
    2. Taylor expanded around 0 1.1

      \[\leadsto \frac{\color{blue}{\left(0.6666666666666667406815349750104360282421 \cdot {x}^{3} + 2\right) - 1 \cdot {x}^{2}}}{2}\]
    3. Simplified1.1

      \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(0.6666666666666667406815349750104360282421, {x}^{3}, 2\right) - 1 \cdot {x}^{2}}}{2}\]
    4. Using strategy rm
    5. Applied add-exp-log1.1

      \[\leadsto \frac{\color{blue}{e^{\log \left(\mathsf{fma}\left(0.6666666666666667406815349750104360282421, {x}^{3}, 2\right) - 1 \cdot {x}^{2}\right)}}}{2}\]
    6. Simplified1.1

      \[\leadsto \frac{e^{\color{blue}{\log \left(\mathsf{fma}\left({x}^{2}, 0.6666666666666667406815349750104360282421 \cdot x - 1, 2\right)\right)}}}{2}\]

    if 19.564058406485834 < x

    1. Initial program 0.4

      \[\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}\]
    2. Taylor expanded around inf 0.4

      \[\leadsto \frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot e^{-\left(1 - \varepsilon\right) \cdot x} - \color{blue}{\left(1 \cdot \frac{e^{-\left(x \cdot \varepsilon + 1 \cdot x\right)}}{\varepsilon} - 1 \cdot e^{-\left(x \cdot \varepsilon + 1 \cdot x\right)}\right)}}{2}\]
    3. Simplified0.4

      \[\leadsto \frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot e^{-\left(1 - \varepsilon\right) \cdot x} - \color{blue}{\left(\frac{\frac{1}{e^{\left(1 + \varepsilon\right) \cdot x}}}{\varepsilon} - \frac{1}{e^{\left(1 + \varepsilon\right) \cdot x}}\right)}}{2}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.9

    \[\leadsto \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}\]

Reproduce

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))