Average Error: 29.5 → 1.1
Time: 6.3s
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 201.192235912335804:\\ \;\;\;\;\frac{\mathsf{fma}\left({x}^{3}, 0.66666666666666674, 2 - 1 \cdot {x}^{2}\right)}{2}\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{e^{-\left(1 + \varepsilon\right) \cdot x}}{2}, 1 - \frac{1}{\varepsilon}, \frac{1 + \frac{1}{\varepsilon}}{2 \cdot e^{\left(1 - \varepsilon\right) \cdot x}}\right)\\ \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 201.192235912335804:\\
\;\;\;\;\frac{\mathsf{fma}\left({x}^{3}, 0.66666666666666674, 2 - 1 \cdot {x}^{2}\right)}{2}\\

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{e^{-\left(1 + \varepsilon\right) \cdot x}}{2}, 1 - \frac{1}{\varepsilon}, \frac{1 + \frac{1}{\varepsilon}}{2 \cdot e^{\left(1 - \varepsilon\right) \cdot x}}\right)\\

\end{array}
double f(double x, double eps) {
        double r42515 = 1.0;
        double r42516 = eps;
        double r42517 = r42515 / r42516;
        double r42518 = r42515 + r42517;
        double r42519 = r42515 - r42516;
        double r42520 = x;
        double r42521 = r42519 * r42520;
        double r42522 = -r42521;
        double r42523 = exp(r42522);
        double r42524 = r42518 * r42523;
        double r42525 = r42517 - r42515;
        double r42526 = r42515 + r42516;
        double r42527 = r42526 * r42520;
        double r42528 = -r42527;
        double r42529 = exp(r42528);
        double r42530 = r42525 * r42529;
        double r42531 = r42524 - r42530;
        double r42532 = 2.0;
        double r42533 = r42531 / r42532;
        return r42533;
}

double f(double x, double eps) {
        double r42534 = x;
        double r42535 = 201.1922359123358;
        bool r42536 = r42534 <= r42535;
        double r42537 = 3.0;
        double r42538 = pow(r42534, r42537);
        double r42539 = 0.6666666666666667;
        double r42540 = 2.0;
        double r42541 = 1.0;
        double r42542 = 2.0;
        double r42543 = pow(r42534, r42542);
        double r42544 = r42541 * r42543;
        double r42545 = r42540 - r42544;
        double r42546 = fma(r42538, r42539, r42545);
        double r42547 = r42546 / r42540;
        double r42548 = eps;
        double r42549 = r42541 + r42548;
        double r42550 = r42549 * r42534;
        double r42551 = -r42550;
        double r42552 = exp(r42551);
        double r42553 = r42552 / r42540;
        double r42554 = r42541 / r42548;
        double r42555 = r42541 - r42554;
        double r42556 = r42541 + r42554;
        double r42557 = r42541 - r42548;
        double r42558 = r42557 * r42534;
        double r42559 = exp(r42558);
        double r42560 = r42540 * r42559;
        double r42561 = r42556 / r42560;
        double r42562 = fma(r42553, r42555, r42561);
        double r42563 = r42536 ? r42547 : r42562;
        return r42563;
}

Error

Bits error versus x

Bits error versus eps

Derivation

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

    1. Initial program 39.2

      \[\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.4

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

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

    if 201.1922359123358 < x

    1. Initial program 0.0

      \[\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. Simplified0.1

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le 201.192235912335804:\\ \;\;\;\;\frac{\mathsf{fma}\left({x}^{3}, 0.66666666666666674, 2 - 1 \cdot {x}^{2}\right)}{2}\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{e^{-\left(1 + \varepsilon\right) \cdot x}}{2}, 1 - \frac{1}{\varepsilon}, \frac{1 + \frac{1}{\varepsilon}}{2 \cdot e^{\left(1 - \varepsilon\right) \cdot x}}\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2020046 +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))