Average Error: 29.6 → 1.1
Time: 26.6s
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 356.3553531120810475840698927640914916992:\\ \;\;\;\;\frac{e^{\mathsf{expm1}\left(\mathsf{log1p}\left(\log \left(\mathsf{fma}\left(0.6666666666666667406815349750104360282421, {x}^{3}, 2\right) - 1 \cdot {x}^{2}\right)\right)\right)}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\sqrt{\frac{1 + \frac{1}{\varepsilon}}{e^{\left(1 - \varepsilon\right) \cdot x}} - \frac{\frac{1}{\varepsilon} - 1}{e^{\left(1 + \varepsilon\right) \cdot x}}} \cdot \sqrt{\frac{1 + \frac{1}{\varepsilon}}{e^{\left(1 - \varepsilon\right) \cdot x}} - \frac{\frac{1}{\varepsilon} - 1}{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 356.3553531120810475840698927640914916992:\\
\;\;\;\;\frac{e^{\mathsf{expm1}\left(\mathsf{log1p}\left(\log \left(\mathsf{fma}\left(0.6666666666666667406815349750104360282421, {x}^{3}, 2\right) - 1 \cdot {x}^{2}\right)\right)\right)}}{2}\\

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

\end{array}
double f(double x, double eps) {
        double r47867 = 1.0;
        double r47868 = eps;
        double r47869 = r47867 / r47868;
        double r47870 = r47867 + r47869;
        double r47871 = r47867 - r47868;
        double r47872 = x;
        double r47873 = r47871 * r47872;
        double r47874 = -r47873;
        double r47875 = exp(r47874);
        double r47876 = r47870 * r47875;
        double r47877 = r47869 - r47867;
        double r47878 = r47867 + r47868;
        double r47879 = r47878 * r47872;
        double r47880 = -r47879;
        double r47881 = exp(r47880);
        double r47882 = r47877 * r47881;
        double r47883 = r47876 - r47882;
        double r47884 = 2.0;
        double r47885 = r47883 / r47884;
        return r47885;
}

double f(double x, double eps) {
        double r47886 = x;
        double r47887 = 356.35535311208105;
        bool r47888 = r47886 <= r47887;
        double r47889 = 0.6666666666666667;
        double r47890 = 3.0;
        double r47891 = pow(r47886, r47890);
        double r47892 = 2.0;
        double r47893 = fma(r47889, r47891, r47892);
        double r47894 = 1.0;
        double r47895 = 2.0;
        double r47896 = pow(r47886, r47895);
        double r47897 = r47894 * r47896;
        double r47898 = r47893 - r47897;
        double r47899 = log(r47898);
        double r47900 = log1p(r47899);
        double r47901 = expm1(r47900);
        double r47902 = exp(r47901);
        double r47903 = r47902 / r47892;
        double r47904 = eps;
        double r47905 = r47894 / r47904;
        double r47906 = r47894 + r47905;
        double r47907 = r47894 - r47904;
        double r47908 = r47907 * r47886;
        double r47909 = exp(r47908);
        double r47910 = r47906 / r47909;
        double r47911 = r47905 - r47894;
        double r47912 = r47894 + r47904;
        double r47913 = r47912 * r47886;
        double r47914 = exp(r47913);
        double r47915 = r47911 / r47914;
        double r47916 = r47910 - r47915;
        double r47917 = sqrt(r47916);
        double r47918 = r47917 * r47917;
        double r47919 = r47918 / r47892;
        double r47920 = r47888 ? r47903 : r47919;
        return r47920;
}

Error

Bits error versus x

Bits error versus eps

Derivation

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

    1. Initial program 39.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. Simplified39.1

      \[\leadsto \color{blue}{\frac{\frac{1 + \frac{1}{\varepsilon}}{e^{\left(1 - \varepsilon\right) \cdot x}} - \frac{\frac{1}{\varepsilon} - 1}{e^{\left(1 + \varepsilon\right) \cdot x}}}{2}}\]
    3. Taylor expanded around 0 1.4

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

      \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(0.6666666666666667406815349750104360282421, {x}^{3}, 2\right) - 1 \cdot {x}^{2}}}{2}\]
    5. Using strategy rm
    6. Applied add-exp-log1.4

      \[\leadsto \frac{\color{blue}{e^{\log \left(\mathsf{fma}\left(0.6666666666666667406815349750104360282421, {x}^{3}, 2\right) - 1 \cdot {x}^{2}\right)}}}{2}\]
    7. Using strategy rm
    8. Applied expm1-log1p-u1.4

      \[\leadsto \frac{e^{\color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\log \left(\mathsf{fma}\left(0.6666666666666667406815349750104360282421, {x}^{3}, 2\right) - 1 \cdot {x}^{2}\right)\right)\right)}}}{2}\]

    if 356.35535311208105 < 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. Simplified0.1

      \[\leadsto \color{blue}{\frac{\frac{1 + \frac{1}{\varepsilon}}{e^{\left(1 - \varepsilon\right) \cdot x}} - \frac{\frac{1}{\varepsilon} - 1}{e^{\left(1 + \varepsilon\right) \cdot x}}}{2}}\]
    3. Using strategy rm
    4. Applied add-sqr-sqrt0.1

      \[\leadsto \frac{\color{blue}{\sqrt{\frac{1 + \frac{1}{\varepsilon}}{e^{\left(1 - \varepsilon\right) \cdot x}} - \frac{\frac{1}{\varepsilon} - 1}{e^{\left(1 + \varepsilon\right) \cdot x}}} \cdot \sqrt{\frac{1 + \frac{1}{\varepsilon}}{e^{\left(1 - \varepsilon\right) \cdot x}} - \frac{\frac{1}{\varepsilon} - 1}{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 356.3553531120810475840698927640914916992:\\ \;\;\;\;\frac{e^{\mathsf{expm1}\left(\mathsf{log1p}\left(\log \left(\mathsf{fma}\left(0.6666666666666667406815349750104360282421, {x}^{3}, 2\right) - 1 \cdot {x}^{2}\right)\right)\right)}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\sqrt{\frac{1 + \frac{1}{\varepsilon}}{e^{\left(1 - \varepsilon\right) \cdot x}} - \frac{\frac{1}{\varepsilon} - 1}{e^{\left(1 + \varepsilon\right) \cdot x}}} \cdot \sqrt{\frac{1 + \frac{1}{\varepsilon}}{e^{\left(1 - \varepsilon\right) \cdot x}} - \frac{\frac{1}{\varepsilon} - 1}{e^{\left(1 + \varepsilon\right) \cdot x}}}}{2}\\ \end{array}\]

Reproduce

herbie shell --seed 2019323 +o rules:numerics
(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))