Average Error: 29.5 → 1.1
Time: 32.5s
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 200.38587470314786:\\ \;\;\;\;\frac{\left(2 + \left(\left(\frac{2}{3} \cdot x\right)\right) \cdot \left(x \cdot x\right)\right) - x \cdot x}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{e^{\log \left(\left(\frac{1}{\varepsilon} + 1\right) \cdot e^{\left(-\left(1 - \varepsilon\right)\right) \cdot x} - e^{\left(1 + \varepsilon\right) \cdot \left(-x\right)} \cdot \left(\frac{1}{\varepsilon} - 1\right)\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 200.38587470314786:\\
\;\;\;\;\frac{\left(2 + \left(\left(\frac{2}{3} \cdot x\right)\right) \cdot \left(x \cdot x\right)\right) - x \cdot x}{2}\\

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

\end{array}
double f(double x, double eps) {
        double r1666899 = 1.0;
        double r1666900 = eps;
        double r1666901 = r1666899 / r1666900;
        double r1666902 = r1666899 + r1666901;
        double r1666903 = r1666899 - r1666900;
        double r1666904 = x;
        double r1666905 = r1666903 * r1666904;
        double r1666906 = -r1666905;
        double r1666907 = exp(r1666906);
        double r1666908 = r1666902 * r1666907;
        double r1666909 = r1666901 - r1666899;
        double r1666910 = r1666899 + r1666900;
        double r1666911 = r1666910 * r1666904;
        double r1666912 = -r1666911;
        double r1666913 = exp(r1666912);
        double r1666914 = r1666909 * r1666913;
        double r1666915 = r1666908 - r1666914;
        double r1666916 = 2.0;
        double r1666917 = r1666915 / r1666916;
        return r1666917;
}

double f(double x, double eps) {
        double r1666918 = x;
        double r1666919 = 200.38587470314786;
        bool r1666920 = r1666918 <= r1666919;
        double r1666921 = 2.0;
        double r1666922 = 0.6666666666666666;
        double r1666923 = r1666922 * r1666918;
        double r1666924 = /* ERROR: no posit support in C */;
        double r1666925 = /* ERROR: no posit support in C */;
        double r1666926 = r1666918 * r1666918;
        double r1666927 = r1666925 * r1666926;
        double r1666928 = r1666921 + r1666927;
        double r1666929 = r1666928 - r1666926;
        double r1666930 = r1666929 / r1666921;
        double r1666931 = 1.0;
        double r1666932 = eps;
        double r1666933 = r1666931 / r1666932;
        double r1666934 = r1666933 + r1666931;
        double r1666935 = r1666931 - r1666932;
        double r1666936 = -r1666935;
        double r1666937 = r1666936 * r1666918;
        double r1666938 = exp(r1666937);
        double r1666939 = r1666934 * r1666938;
        double r1666940 = r1666931 + r1666932;
        double r1666941 = -r1666918;
        double r1666942 = r1666940 * r1666941;
        double r1666943 = exp(r1666942);
        double r1666944 = r1666933 - r1666931;
        double r1666945 = r1666943 * r1666944;
        double r1666946 = r1666939 - r1666945;
        double r1666947 = log(r1666946);
        double r1666948 = exp(r1666947);
        double r1666949 = r1666948 / r1666921;
        double r1666950 = r1666920 ? r1666930 : r1666949;
        return r1666950;
}

Error

Bits error versus x

Bits error versus eps

Derivation

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

    1. Initial program 39.0

      \[\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}{\frac{2}{3} \cdot \left(x \cdot \left(x \cdot x\right)\right) + \left(2 - x \cdot x\right)}}{2}\]
    4. Taylor expanded around 0 1.4

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

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

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

    if 200.38587470314786 < 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-exp-log0.2

      \[\leadsto \frac{\color{blue}{e^{\log \left(\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}\right)}}}{2}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification1.1

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

Reproduce

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