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

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

\end{array}
double f(double x, double eps) {
        double r27556 = 1.0;
        double r27557 = eps;
        double r27558 = r27556 / r27557;
        double r27559 = r27556 + r27558;
        double r27560 = r27556 - r27557;
        double r27561 = x;
        double r27562 = r27560 * r27561;
        double r27563 = -r27562;
        double r27564 = exp(r27563);
        double r27565 = r27559 * r27564;
        double r27566 = r27558 - r27556;
        double r27567 = r27556 + r27557;
        double r27568 = r27567 * r27561;
        double r27569 = -r27568;
        double r27570 = exp(r27569);
        double r27571 = r27566 * r27570;
        double r27572 = r27565 - r27571;
        double r27573 = 2.0;
        double r27574 = r27572 / r27573;
        return r27574;
}

double f(double x, double eps) {
        double r27575 = x;
        double r27576 = 130.4040333957902;
        bool r27577 = r27575 <= r27576;
        double r27578 = 3.0;
        double r27579 = pow(r27575, r27578);
        double r27580 = 0.6666666666666667;
        double r27581 = 2.0;
        double r27582 = 1.0;
        double r27583 = 2.0;
        double r27584 = pow(r27575, r27583);
        double r27585 = r27582 * r27584;
        double r27586 = r27581 - r27585;
        double r27587 = fma(r27579, r27580, r27586);
        double r27588 = r27587 / r27581;
        double r27589 = eps;
        double r27590 = r27575 * r27589;
        double r27591 = r27582 * r27575;
        double r27592 = r27590 - r27591;
        double r27593 = exp(r27592);
        double r27594 = r27593 / r27589;
        double r27595 = 1.0;
        double r27596 = fma(r27575, r27589, r27591);
        double r27597 = exp(r27596);
        double r27598 = r27595 / r27597;
        double r27599 = r27598 + r27593;
        double r27600 = r27582 * r27599;
        double r27601 = r27590 + r27591;
        double r27602 = -r27601;
        double r27603 = exp(r27602);
        double r27604 = r27603 / r27589;
        double r27605 = r27582 * r27604;
        double r27606 = r27600 - r27605;
        double r27607 = fma(r27582, r27594, r27606);
        double r27608 = r27607 / r27581;
        double r27609 = r27577 ? r27588 : r27608;
        return r27609;
}

Error

Bits error versus x

Bits error versus eps

Derivation

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

    1. Initial program 38.8

      \[\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 130.4040333957902 < x

    1. Initial program 0.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 inf 0.2

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

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

    \[\leadsto \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{\mathsf{fma}\left(1, \frac{e^{x \cdot \varepsilon - 1 \cdot x}}{\varepsilon}, 1 \cdot \left(\frac{1}{e^{\mathsf{fma}\left(x, \varepsilon, 1 \cdot x\right)}} + e^{x \cdot \varepsilon - 1 \cdot x}\right) - 1 \cdot \frac{e^{-\left(x \cdot \varepsilon + 1 \cdot x\right)}}{\varepsilon}\right)}{2}\\ \end{array}\]

Reproduce

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