Average Error: 29.7 → 1.1
Time: 30.7s
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 331.7599664969623631805006880313158035278:\\ \;\;\;\;\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(\left(\sqrt[3]{\frac{1}{\varepsilon} - 1} \cdot \sqrt[3]{\frac{1}{\varepsilon} - 1}\right) \cdot \sqrt[3]{\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 331.7599664969623631805006880313158035278:\\
\;\;\;\;\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(\left(\sqrt[3]{\frac{1}{\varepsilon} - 1} \cdot \sqrt[3]{\frac{1}{\varepsilon} - 1}\right) \cdot \sqrt[3]{\frac{1}{\varepsilon} - 1}\right) \cdot e^{-\left(1 + \varepsilon\right) \cdot x}}{2}\\

\end{array}
double f(double x, double eps) {
        double r41016 = 1.0;
        double r41017 = eps;
        double r41018 = r41016 / r41017;
        double r41019 = r41016 + r41018;
        double r41020 = r41016 - r41017;
        double r41021 = x;
        double r41022 = r41020 * r41021;
        double r41023 = -r41022;
        double r41024 = exp(r41023);
        double r41025 = r41019 * r41024;
        double r41026 = r41018 - r41016;
        double r41027 = r41016 + r41017;
        double r41028 = r41027 * r41021;
        double r41029 = -r41028;
        double r41030 = exp(r41029);
        double r41031 = r41026 * r41030;
        double r41032 = r41025 - r41031;
        double r41033 = 2.0;
        double r41034 = r41032 / r41033;
        return r41034;
}

double f(double x, double eps) {
        double r41035 = x;
        double r41036 = 331.75996649696236;
        bool r41037 = r41035 <= r41036;
        double r41038 = 0.6666666666666667;
        double r41039 = 3.0;
        double r41040 = pow(r41035, r41039);
        double r41041 = r41038 * r41040;
        double r41042 = 2.0;
        double r41043 = r41041 + r41042;
        double r41044 = 1.0;
        double r41045 = 2.0;
        double r41046 = pow(r41035, r41045);
        double r41047 = r41044 * r41046;
        double r41048 = r41043 - r41047;
        double r41049 = r41048 / r41042;
        double r41050 = eps;
        double r41051 = r41044 / r41050;
        double r41052 = r41044 + r41051;
        double r41053 = r41044 - r41050;
        double r41054 = r41053 * r41035;
        double r41055 = -r41054;
        double r41056 = exp(r41055);
        double r41057 = r41052 * r41056;
        double r41058 = r41051 - r41044;
        double r41059 = cbrt(r41058);
        double r41060 = r41059 * r41059;
        double r41061 = r41060 * r41059;
        double r41062 = r41044 + r41050;
        double r41063 = r41062 * r41035;
        double r41064 = -r41063;
        double r41065 = exp(r41064);
        double r41066 = r41061 * r41065;
        double r41067 = r41057 - r41066;
        double r41068 = r41067 / r41042;
        double r41069 = r41037 ? r41049 : r41068;
        return r41069;
}

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 < 331.75996649696236

    1. Initial program 39.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. Taylor expanded around 0 1.4

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

    if 331.75996649696236 < x

    1. Initial program 0.2

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

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

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

Reproduce

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