Average Error: 28.8 → 0.9
Time: 51.7s
Precision: 64
\[\frac{\left(1.0 + \frac{1.0}{\varepsilon}\right) \cdot e^{-\left(1.0 - \varepsilon\right) \cdot x} - \left(\frac{1.0}{\varepsilon} - 1.0\right) \cdot e^{-\left(1.0 + \varepsilon\right) \cdot x}}{2.0}\]
\[\begin{array}{l} \mathbf{if}\;x \le 30.43326508471591:\\ \;\;\;\;\frac{\sqrt[3]{\left(2.0 + \left(x \cdot x\right) \cdot \left(0.6666666666666667 \cdot x - 1.0\right)\right) \cdot \left(\left(2.0 + \left(x \cdot x\right) \cdot \left(0.6666666666666667 \cdot x - 1.0\right)\right) \cdot \left(2.0 + \left(x \cdot x\right) \cdot \left(0.6666666666666667 \cdot x - 1.0\right)\right)\right)}}{2.0}\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(1.0 + \frac{1.0}{\varepsilon}\right) \cdot e^{\left(-x\right) \cdot \left(1.0 - \varepsilon\right)} - \left(\frac{1.0}{\varepsilon} - 1.0\right) \cdot {e}^{\left(\left(\varepsilon + 1.0\right) \cdot \left(-x\right)\right)}}{2.0}\\ \end{array}\]
\frac{\left(1.0 + \frac{1.0}{\varepsilon}\right) \cdot e^{-\left(1.0 - \varepsilon\right) \cdot x} - \left(\frac{1.0}{\varepsilon} - 1.0\right) \cdot e^{-\left(1.0 + \varepsilon\right) \cdot x}}{2.0}
\begin{array}{l}
\mathbf{if}\;x \le 30.43326508471591:\\
\;\;\;\;\frac{\sqrt[3]{\left(2.0 + \left(x \cdot x\right) \cdot \left(0.6666666666666667 \cdot x - 1.0\right)\right) \cdot \left(\left(2.0 + \left(x \cdot x\right) \cdot \left(0.6666666666666667 \cdot x - 1.0\right)\right) \cdot \left(2.0 + \left(x \cdot x\right) \cdot \left(0.6666666666666667 \cdot x - 1.0\right)\right)\right)}}{2.0}\\

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

\end{array}
double f(double x, double eps) {
        double r2574969 = 1.0;
        double r2574970 = eps;
        double r2574971 = r2574969 / r2574970;
        double r2574972 = r2574969 + r2574971;
        double r2574973 = r2574969 - r2574970;
        double r2574974 = x;
        double r2574975 = r2574973 * r2574974;
        double r2574976 = -r2574975;
        double r2574977 = exp(r2574976);
        double r2574978 = r2574972 * r2574977;
        double r2574979 = r2574971 - r2574969;
        double r2574980 = r2574969 + r2574970;
        double r2574981 = r2574980 * r2574974;
        double r2574982 = -r2574981;
        double r2574983 = exp(r2574982);
        double r2574984 = r2574979 * r2574983;
        double r2574985 = r2574978 - r2574984;
        double r2574986 = 2.0;
        double r2574987 = r2574985 / r2574986;
        return r2574987;
}

double f(double x, double eps) {
        double r2574988 = x;
        double r2574989 = 30.43326508471591;
        bool r2574990 = r2574988 <= r2574989;
        double r2574991 = 2.0;
        double r2574992 = r2574988 * r2574988;
        double r2574993 = 0.6666666666666667;
        double r2574994 = r2574993 * r2574988;
        double r2574995 = 1.0;
        double r2574996 = r2574994 - r2574995;
        double r2574997 = r2574992 * r2574996;
        double r2574998 = r2574991 + r2574997;
        double r2574999 = r2574998 * r2574998;
        double r2575000 = r2574998 * r2574999;
        double r2575001 = cbrt(r2575000);
        double r2575002 = r2575001 / r2574991;
        double r2575003 = eps;
        double r2575004 = r2574995 / r2575003;
        double r2575005 = r2574995 + r2575004;
        double r2575006 = -r2574988;
        double r2575007 = r2574995 - r2575003;
        double r2575008 = r2575006 * r2575007;
        double r2575009 = exp(r2575008);
        double r2575010 = r2575005 * r2575009;
        double r2575011 = r2575004 - r2574995;
        double r2575012 = exp(1.0);
        double r2575013 = r2575003 + r2574995;
        double r2575014 = r2575013 * r2575006;
        double r2575015 = pow(r2575012, r2575014);
        double r2575016 = r2575011 * r2575015;
        double r2575017 = r2575010 - r2575016;
        double r2575018 = r2575017 / r2574991;
        double r2575019 = r2574990 ? r2575002 : r2575018;
        return r2575019;
}

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

    1. Initial program 37.8

      \[\frac{\left(1.0 + \frac{1.0}{\varepsilon}\right) \cdot e^{-\left(1.0 - \varepsilon\right) \cdot x} - \left(\frac{1.0}{\varepsilon} - 1.0\right) \cdot e^{-\left(1.0 + \varepsilon\right) \cdot x}}{2.0}\]
    2. Taylor expanded around 0 1.1

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

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

      \[\leadsto \frac{\color{blue}{\left(\left(2.0 + x \cdot \left(\left(x \cdot x\right) \cdot 0.6666666666666667\right)\right)\right)} - \left(x \cdot x\right) \cdot 1.0}{2.0}\]
    6. Using strategy rm
    7. Applied add-cbrt-cube1.2

      \[\leadsto \frac{\color{blue}{\sqrt[3]{\left(\left(\left(\left(2.0 + x \cdot \left(\left(x \cdot x\right) \cdot 0.6666666666666667\right)\right)\right) - \left(x \cdot x\right) \cdot 1.0\right) \cdot \left(\left(\left(2.0 + x \cdot \left(\left(x \cdot x\right) \cdot 0.6666666666666667\right)\right)\right) - \left(x \cdot x\right) \cdot 1.0\right)\right) \cdot \left(\left(\left(2.0 + x \cdot \left(\left(x \cdot x\right) \cdot 0.6666666666666667\right)\right)\right) - \left(x \cdot x\right) \cdot 1.0\right)}}}{2.0}\]
    8. Simplified1.1

      \[\leadsto \frac{\sqrt[3]{\color{blue}{\left(2.0 + \left(x \cdot x\right) \cdot \left(0.6666666666666667 \cdot x - 1.0\right)\right) \cdot \left(\left(2.0 + \left(x \cdot x\right) \cdot \left(0.6666666666666667 \cdot x - 1.0\right)\right) \cdot \left(2.0 + \left(x \cdot x\right) \cdot \left(0.6666666666666667 \cdot x - 1.0\right)\right)\right)}}}{2.0}\]

    if 30.43326508471591 < x

    1. Initial program 0.3

      \[\frac{\left(1.0 + \frac{1.0}{\varepsilon}\right) \cdot e^{-\left(1.0 - \varepsilon\right) \cdot x} - \left(\frac{1.0}{\varepsilon} - 1.0\right) \cdot e^{-\left(1.0 + \varepsilon\right) \cdot x}}{2.0}\]
    2. Using strategy rm
    3. Applied *-un-lft-identity0.3

      \[\leadsto \frac{\left(1.0 + \frac{1.0}{\varepsilon}\right) \cdot e^{-\left(1.0 - \varepsilon\right) \cdot x} - \left(\frac{1.0}{\varepsilon} - 1.0\right) \cdot e^{\color{blue}{1 \cdot \left(-\left(1.0 + \varepsilon\right) \cdot x\right)}}}{2.0}\]
    4. Applied exp-prod0.3

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le 30.43326508471591:\\ \;\;\;\;\frac{\sqrt[3]{\left(2.0 + \left(x \cdot x\right) \cdot \left(0.6666666666666667 \cdot x - 1.0\right)\right) \cdot \left(\left(2.0 + \left(x \cdot x\right) \cdot \left(0.6666666666666667 \cdot x - 1.0\right)\right) \cdot \left(2.0 + \left(x \cdot x\right) \cdot \left(0.6666666666666667 \cdot x - 1.0\right)\right)\right)}}{2.0}\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(1.0 + \frac{1.0}{\varepsilon}\right) \cdot e^{\left(-x\right) \cdot \left(1.0 - \varepsilon\right)} - \left(\frac{1.0}{\varepsilon} - 1.0\right) \cdot {e}^{\left(\left(\varepsilon + 1.0\right) \cdot \left(-x\right)\right)}}{2.0}\\ \end{array}\]

Reproduce

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