Average Error: 29.6 → 1.0
Time: 3.1m
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 223.51192032584117:\\ \;\;\;\;\frac{\mathsf{fma}\left(\left(\left(x \cdot x\right) \cdot x\right), \frac{2}{3}, \left(2 - x \cdot x\right)\right)}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(\frac{1}{\varepsilon} + 1\right) \cdot e^{\varepsilon \cdot x - x} - e^{\left(\varepsilon + 1\right) \cdot \left(-x\right)} \cdot \left(\frac{1}{\varepsilon} - 1\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 223.51192032584117:\\
\;\;\;\;\frac{\mathsf{fma}\left(\left(\left(x \cdot x\right) \cdot x\right), \frac{2}{3}, \left(2 - x \cdot x\right)\right)}{2}\\

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

\end{array}
double f(double x, double eps) {
        double r16730626 = 1.0;
        double r16730627 = eps;
        double r16730628 = r16730626 / r16730627;
        double r16730629 = r16730626 + r16730628;
        double r16730630 = r16730626 - r16730627;
        double r16730631 = x;
        double r16730632 = r16730630 * r16730631;
        double r16730633 = -r16730632;
        double r16730634 = exp(r16730633);
        double r16730635 = r16730629 * r16730634;
        double r16730636 = r16730628 - r16730626;
        double r16730637 = r16730626 + r16730627;
        double r16730638 = r16730637 * r16730631;
        double r16730639 = -r16730638;
        double r16730640 = exp(r16730639);
        double r16730641 = r16730636 * r16730640;
        double r16730642 = r16730635 - r16730641;
        double r16730643 = 2.0;
        double r16730644 = r16730642 / r16730643;
        return r16730644;
}

double f(double x, double eps) {
        double r16730645 = x;
        double r16730646 = 223.51192032584117;
        bool r16730647 = r16730645 <= r16730646;
        double r16730648 = r16730645 * r16730645;
        double r16730649 = r16730648 * r16730645;
        double r16730650 = 0.6666666666666666;
        double r16730651 = 2.0;
        double r16730652 = r16730651 - r16730648;
        double r16730653 = fma(r16730649, r16730650, r16730652);
        double r16730654 = r16730653 / r16730651;
        double r16730655 = 1.0;
        double r16730656 = eps;
        double r16730657 = r16730655 / r16730656;
        double r16730658 = r16730657 + r16730655;
        double r16730659 = r16730656 * r16730645;
        double r16730660 = r16730659 - r16730645;
        double r16730661 = exp(r16730660);
        double r16730662 = r16730658 * r16730661;
        double r16730663 = r16730656 + r16730655;
        double r16730664 = -r16730645;
        double r16730665 = r16730663 * r16730664;
        double r16730666 = exp(r16730665);
        double r16730667 = r16730657 - r16730655;
        double r16730668 = r16730666 * r16730667;
        double r16730669 = r16730662 - r16730668;
        double r16730670 = r16730669 / r16730651;
        double r16730671 = r16730647 ? r16730654 : r16730670;
        return r16730671;
}

Error

Bits error versus x

Bits error versus eps

Derivation

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

    1. Initial program 39.5

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

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

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

    if 223.51192032584117 < 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. Taylor expanded around -inf 0.1

      \[\leadsto \frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot \color{blue}{e^{x \cdot \varepsilon - 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.0

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

Reproduce

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