Average Error: 28.7 → 1.5
Time: 26.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 1.4798868095701662 \cdot 10^{-06}:\\ \;\;\;\;\frac{\left(\left(\left(2 - x \cdot x\right) + \left(\frac{2}{3} \cdot \left(x \cdot x\right)\right) \cdot x\right)\right)}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(\frac{1}{\varepsilon} + 1\right) \cdot \sqrt[3]{e^{\left(1 - \varepsilon\right) \cdot \left(-x\right)} \cdot \left(e^{\left(1 - \varepsilon\right) \cdot \left(-x\right)} \cdot e^{\left(1 - \varepsilon\right) \cdot \left(-x\right)}\right)} - \left(\frac{1}{\varepsilon} - 1\right) \cdot e^{\left(-x\right) \cdot \left(1 + \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 1.4798868095701662 \cdot 10^{-06}:\\
\;\;\;\;\frac{\left(\left(\left(2 - x \cdot x\right) + \left(\frac{2}{3} \cdot \left(x \cdot x\right)\right) \cdot x\right)\right)}{2}\\

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

\end{array}
double f(double x, double eps) {
        double r1791607 = 1.0;
        double r1791608 = eps;
        double r1791609 = r1791607 / r1791608;
        double r1791610 = r1791607 + r1791609;
        double r1791611 = r1791607 - r1791608;
        double r1791612 = x;
        double r1791613 = r1791611 * r1791612;
        double r1791614 = -r1791613;
        double r1791615 = exp(r1791614);
        double r1791616 = r1791610 * r1791615;
        double r1791617 = r1791609 - r1791607;
        double r1791618 = r1791607 + r1791608;
        double r1791619 = r1791618 * r1791612;
        double r1791620 = -r1791619;
        double r1791621 = exp(r1791620);
        double r1791622 = r1791617 * r1791621;
        double r1791623 = r1791616 - r1791622;
        double r1791624 = 2.0;
        double r1791625 = r1791623 / r1791624;
        return r1791625;
}

double f(double x, double eps) {
        double r1791626 = x;
        double r1791627 = 1.4798868095701662e-06;
        bool r1791628 = r1791626 <= r1791627;
        double r1791629 = 2.0;
        double r1791630 = r1791626 * r1791626;
        double r1791631 = r1791629 - r1791630;
        double r1791632 = 0.6666666666666666;
        double r1791633 = r1791632 * r1791630;
        double r1791634 = r1791633 * r1791626;
        double r1791635 = r1791631 + r1791634;
        double r1791636 = /* ERROR: no posit support in C */;
        double r1791637 = /* ERROR: no posit support in C */;
        double r1791638 = r1791637 / r1791629;
        double r1791639 = 1.0;
        double r1791640 = eps;
        double r1791641 = r1791639 / r1791640;
        double r1791642 = r1791641 + r1791639;
        double r1791643 = r1791639 - r1791640;
        double r1791644 = -r1791626;
        double r1791645 = r1791643 * r1791644;
        double r1791646 = exp(r1791645);
        double r1791647 = r1791646 * r1791646;
        double r1791648 = r1791646 * r1791647;
        double r1791649 = cbrt(r1791648);
        double r1791650 = r1791642 * r1791649;
        double r1791651 = r1791641 - r1791639;
        double r1791652 = r1791639 + r1791640;
        double r1791653 = r1791644 * r1791652;
        double r1791654 = exp(r1791653);
        double r1791655 = r1791651 * r1791654;
        double r1791656 = r1791650 - r1791655;
        double r1791657 = r1791656 / r1791629;
        double r1791658 = r1791628 ? r1791638 : r1791657;
        return r1791658;
}

Error

Bits error versus x

Bits error versus eps

Derivation

  1. Split input into 2 regimes
  2. if x < 1.4798868095701662e-06

    1. Initial program 38.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(\frac{2}{3} \cdot {x}^{3} + 2\right) - {x}^{2}}}{2}\]
    3. Simplified1.4

      \[\leadsto \frac{\color{blue}{\left(\frac{2}{3} \cdot \left(x \cdot x\right)\right) \cdot x + \left(2 - x \cdot x\right)}}{2}\]
    4. Using strategy rm
    5. Applied insert-posit161.5

      \[\leadsto \frac{\color{blue}{\left(\left(\left(\frac{2}{3} \cdot \left(x \cdot x\right)\right) \cdot x + \left(2 - x \cdot x\right)\right)\right)}}{2}\]

    if 1.4798868095701662e-06 < x

    1. Initial program 1.7

      \[\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-cbrt-cube1.6

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

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

Reproduce

herbie shell --seed 2019168 
(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))