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

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

\end{array}
double f(double x, double eps) {
        double r41611 = 1.0;
        double r41612 = eps;
        double r41613 = r41611 / r41612;
        double r41614 = r41611 + r41613;
        double r41615 = r41611 - r41612;
        double r41616 = x;
        double r41617 = r41615 * r41616;
        double r41618 = -r41617;
        double r41619 = exp(r41618);
        double r41620 = r41614 * r41619;
        double r41621 = r41613 - r41611;
        double r41622 = r41611 + r41612;
        double r41623 = r41622 * r41616;
        double r41624 = -r41623;
        double r41625 = exp(r41624);
        double r41626 = r41621 * r41625;
        double r41627 = r41620 - r41626;
        double r41628 = 2.0;
        double r41629 = r41627 / r41628;
        return r41629;
}

double f(double x, double eps) {
        double r41630 = x;
        double r41631 = 162.56045792773165;
        bool r41632 = r41630 <= r41631;
        double r41633 = 3.0;
        double r41634 = pow(r41630, r41633);
        double r41635 = 0.6666666666666667;
        double r41636 = 2.0;
        double r41637 = fma(r41634, r41635, r41636);
        double r41638 = 1.0;
        double r41639 = r41630 * r41630;
        double r41640 = r41638 * r41639;
        double r41641 = r41637 - r41640;
        double r41642 = r41641 / r41636;
        double r41643 = eps;
        double r41644 = r41638 / r41643;
        double r41645 = r41644 + r41638;
        double r41646 = r41638 - r41643;
        double r41647 = -r41630;
        double r41648 = r41646 * r41647;
        double r41649 = exp(r41648);
        double r41650 = r41645 * r41649;
        double r41651 = r41643 + r41638;
        double r41652 = -r41651;
        double r41653 = r41630 * r41652;
        double r41654 = exp(r41653);
        double r41655 = r41644 - r41638;
        double r41656 = r41654 * r41655;
        double r41657 = cbrt(r41656);
        double r41658 = r41657 * r41657;
        double r41659 = r41657 * r41658;
        double r41660 = r41650 - r41659;
        double r41661 = r41660 / r41636;
        double r41662 = r41632 ? r41642 : r41661;
        return r41662;
}

Error

Bits error versus x

Bits error versus eps

Derivation

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

    1. Initial program 39.1

      \[\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.6666666666666667406815349750104360282421 \cdot {x}^{3} + 2\right) - 1 \cdot {x}^{2}}}{2}\]
    3. Simplified1.4

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

    if 162.56045792773165 < x

    1. Initial program 0.1

      \[\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. Using strategy rm
    3. Applied add-cube-cbrt0.1

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

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

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

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

Reproduce

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