Average Error: 29.9 → 1.1
Time: 31.5s
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 2.224816812712469:\\ \;\;\;\;\frac{1}{2} \cdot \mathsf{fma}\left(x \cdot x, \frac{2}{3} \cdot x, 2 - x \cdot x\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{2} \cdot \left(\mathsf{fma}\left(e^{\left(\varepsilon + -1\right) \cdot x}, \frac{1}{\varepsilon}, e^{\left(\varepsilon + -1\right) \cdot x}\right) - \frac{\frac{1}{\varepsilon} - 1}{\left(\sqrt[3]{e^{\mathsf{fma}\left(\varepsilon, x, x\right)}} \cdot \sqrt[3]{e^{\mathsf{fma}\left(\varepsilon, x, x\right)}}\right) \cdot \sqrt[3]{e^{\mathsf{fma}\left(\varepsilon, x, x\right)}}}\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 2.224816812712469:\\
\;\;\;\;\frac{1}{2} \cdot \mathsf{fma}\left(x \cdot x, \frac{2}{3} \cdot x, 2 - x \cdot x\right)\\

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

\end{array}
double f(double x, double eps) {
        double r1727596 = 1.0;
        double r1727597 = eps;
        double r1727598 = r1727596 / r1727597;
        double r1727599 = r1727596 + r1727598;
        double r1727600 = r1727596 - r1727597;
        double r1727601 = x;
        double r1727602 = r1727600 * r1727601;
        double r1727603 = -r1727602;
        double r1727604 = exp(r1727603);
        double r1727605 = r1727599 * r1727604;
        double r1727606 = r1727598 - r1727596;
        double r1727607 = r1727596 + r1727597;
        double r1727608 = r1727607 * r1727601;
        double r1727609 = -r1727608;
        double r1727610 = exp(r1727609);
        double r1727611 = r1727606 * r1727610;
        double r1727612 = r1727605 - r1727611;
        double r1727613 = 2.0;
        double r1727614 = r1727612 / r1727613;
        return r1727614;
}

double f(double x, double eps) {
        double r1727615 = x;
        double r1727616 = 2.224816812712469;
        bool r1727617 = r1727615 <= r1727616;
        double r1727618 = 0.5;
        double r1727619 = r1727615 * r1727615;
        double r1727620 = 0.6666666666666666;
        double r1727621 = r1727620 * r1727615;
        double r1727622 = 2.0;
        double r1727623 = r1727622 - r1727619;
        double r1727624 = fma(r1727619, r1727621, r1727623);
        double r1727625 = r1727618 * r1727624;
        double r1727626 = eps;
        double r1727627 = -1.0;
        double r1727628 = r1727626 + r1727627;
        double r1727629 = r1727628 * r1727615;
        double r1727630 = exp(r1727629);
        double r1727631 = 1.0;
        double r1727632 = r1727631 / r1727626;
        double r1727633 = fma(r1727630, r1727632, r1727630);
        double r1727634 = r1727632 - r1727631;
        double r1727635 = fma(r1727626, r1727615, r1727615);
        double r1727636 = exp(r1727635);
        double r1727637 = cbrt(r1727636);
        double r1727638 = r1727637 * r1727637;
        double r1727639 = r1727638 * r1727637;
        double r1727640 = r1727634 / r1727639;
        double r1727641 = r1727633 - r1727640;
        double r1727642 = r1727618 * r1727641;
        double r1727643 = r1727617 ? r1727625 : r1727642;
        return r1727643;
}

Error

Bits error versus x

Bits error versus eps

Derivation

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

    1. Initial program 39.3

      \[\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. Simplified39.3

      \[\leadsto \color{blue}{\frac{1}{2} \cdot \left(\mathsf{fma}\left(e^{x \cdot \left(-1 + \varepsilon\right)}, \frac{1}{\varepsilon}, e^{x \cdot \left(-1 + \varepsilon\right)}\right) - \frac{\frac{1}{\varepsilon} - 1}{e^{\mathsf{fma}\left(\varepsilon, x, x\right)}}\right)}\]
    3. Taylor expanded around 0 1.3

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

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

    if 2.224816812712469 < 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. Simplified0.4

      \[\leadsto \color{blue}{\frac{1}{2} \cdot \left(\mathsf{fma}\left(e^{x \cdot \left(-1 + \varepsilon\right)}, \frac{1}{\varepsilon}, e^{x \cdot \left(-1 + \varepsilon\right)}\right) - \frac{\frac{1}{\varepsilon} - 1}{e^{\mathsf{fma}\left(\varepsilon, x, x\right)}}\right)}\]
    3. Using strategy rm
    4. Applied add-cube-cbrt0.4

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

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

Reproduce

herbie shell --seed 2019158 +o rules:numerics
(FPCore (x eps)
  :name "NMSE Section 6.1 mentioned, A"
  (/ (- (* (+ 1 (/ 1 eps)) (exp (- (* (- 1 eps) x)))) (* (- (/ 1 eps) 1) (exp (- (* (+ 1 eps) x))))) 2))