Average Error: 29.2 → 0.9
Time: 2.8m
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 326.6122928500697639719874132424592971802:\\ \;\;\;\;\frac{\left(0.6666666666666667406815349750104360282421 \cdot {x}^{3} + 2\right) - 1 \cdot {x}^{2}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot e^{-\left(1 - \varepsilon\right) \cdot x} - \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}\\ \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 326.6122928500697639719874132424592971802:\\
\;\;\;\;\frac{\left(0.6666666666666667406815349750104360282421 \cdot {x}^{3} + 2\right) - 1 \cdot {x}^{2}}{2}\\

\mathbf{else}:\\
\;\;\;\;\frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot e^{-\left(1 - \varepsilon\right) \cdot x} - \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}\\

\end{array}
double f(double x, double eps) {
        double r445092 = 1.0;
        double r445093 = eps;
        double r445094 = r445092 / r445093;
        double r445095 = r445092 + r445094;
        double r445096 = r445092 - r445093;
        double r445097 = x;
        double r445098 = r445096 * r445097;
        double r445099 = -r445098;
        double r445100 = exp(r445099);
        double r445101 = r445095 * r445100;
        double r445102 = r445094 - r445092;
        double r445103 = r445092 + r445093;
        double r445104 = r445103 * r445097;
        double r445105 = -r445104;
        double r445106 = exp(r445105);
        double r445107 = r445102 * r445106;
        double r445108 = r445101 - r445107;
        double r445109 = 2.0;
        double r445110 = r445108 / r445109;
        return r445110;
}

double f(double x, double eps) {
        double r445111 = x;
        double r445112 = 326.61229285006976;
        bool r445113 = r445111 <= r445112;
        double r445114 = 0.6666666666666667;
        double r445115 = 3.0;
        double r445116 = pow(r445111, r445115);
        double r445117 = r445114 * r445116;
        double r445118 = 2.0;
        double r445119 = r445117 + r445118;
        double r445120 = 1.0;
        double r445121 = 2.0;
        double r445122 = pow(r445111, r445121);
        double r445123 = r445120 * r445122;
        double r445124 = r445119 - r445123;
        double r445125 = r445124 / r445118;
        double r445126 = eps;
        double r445127 = r445120 / r445126;
        double r445128 = r445120 + r445127;
        double r445129 = r445120 - r445126;
        double r445130 = r445129 * r445111;
        double r445131 = -r445130;
        double r445132 = exp(r445131);
        double r445133 = r445128 * r445132;
        double r445134 = r445127 - r445120;
        double r445135 = r445120 + r445126;
        double r445136 = r445135 * r445111;
        double r445137 = -r445136;
        double r445138 = exp(r445137);
        double r445139 = r445134 * r445138;
        double r445140 = cbrt(r445139);
        double r445141 = r445140 * r445140;
        double r445142 = r445141 * r445140;
        double r445143 = r445133 - r445142;
        double r445144 = r445143 / r445118;
        double r445145 = r445113 ? r445125 : r445144;
        return r445145;
}

Error

Bits error versus x

Bits error versus eps

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

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

    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.2

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

    if 326.61229285006976 < 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}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.9

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le 326.6122928500697639719874132424592971802:\\ \;\;\;\;\frac{\left(0.6666666666666667406815349750104360282421 \cdot {x}^{3} + 2\right) - 1 \cdot {x}^{2}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot e^{-\left(1 - \varepsilon\right) \cdot x} - \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}\\ \end{array}\]

Reproduce

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