Average Error: 29.4 → 4.1
Time: 6.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 5.4591940367026102 \cdot 10^{-22}:\\ \;\;\;\;\mathsf{fma}\left(1.38778 \cdot 10^{-17}, \frac{{\left(\left(2 \cdot \log \left(\sqrt[3]{e^{\sqrt[3]{x}}}\right) + \log \left(\sqrt[3]{e^{\sqrt[3]{x}}}\right)\right) \cdot \sqrt[3]{x}\right)}^{3}}{\frac{\varepsilon}{x}}, 1 - 0.5 \cdot {x}^{2}\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{e^{-\left(1 + \varepsilon\right) \cdot x}}{2}, 1 - \frac{1}{\varepsilon}, \mathsf{fma}\left(0.5, \frac{1}{e^{x \cdot \left(1 - \varepsilon\right)} \cdot \varepsilon}, \frac{0.5}{e^{x \cdot \left(1 - \varepsilon\right)}}\right)\right)\\ \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 5.4591940367026102 \cdot 10^{-22}:\\
\;\;\;\;\mathsf{fma}\left(1.38778 \cdot 10^{-17}, \frac{{\left(\left(2 \cdot \log \left(\sqrt[3]{e^{\sqrt[3]{x}}}\right) + \log \left(\sqrt[3]{e^{\sqrt[3]{x}}}\right)\right) \cdot \sqrt[3]{x}\right)}^{3}}{\frac{\varepsilon}{x}}, 1 - 0.5 \cdot {x}^{2}\right)\\

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

\end{array}
double f(double x, double eps) {
        double r59790 = 1.0;
        double r59791 = eps;
        double r59792 = r59790 / r59791;
        double r59793 = r59790 + r59792;
        double r59794 = r59790 - r59791;
        double r59795 = x;
        double r59796 = r59794 * r59795;
        double r59797 = -r59796;
        double r59798 = exp(r59797);
        double r59799 = r59793 * r59798;
        double r59800 = r59792 - r59790;
        double r59801 = r59790 + r59791;
        double r59802 = r59801 * r59795;
        double r59803 = -r59802;
        double r59804 = exp(r59803);
        double r59805 = r59800 * r59804;
        double r59806 = r59799 - r59805;
        double r59807 = 2.0;
        double r59808 = r59806 / r59807;
        return r59808;
}

double f(double x, double eps) {
        double r59809 = x;
        double r59810 = 5.45919403670261e-22;
        bool r59811 = r59809 <= r59810;
        double r59812 = 1.3877787807814457e-17;
        double r59813 = 2.0;
        double r59814 = cbrt(r59809);
        double r59815 = exp(r59814);
        double r59816 = cbrt(r59815);
        double r59817 = log(r59816);
        double r59818 = r59813 * r59817;
        double r59819 = r59818 + r59817;
        double r59820 = r59819 * r59814;
        double r59821 = 3.0;
        double r59822 = pow(r59820, r59821);
        double r59823 = eps;
        double r59824 = r59823 / r59809;
        double r59825 = r59822 / r59824;
        double r59826 = 1.0;
        double r59827 = 0.5;
        double r59828 = pow(r59809, r59813);
        double r59829 = r59827 * r59828;
        double r59830 = r59826 - r59829;
        double r59831 = fma(r59812, r59825, r59830);
        double r59832 = r59826 + r59823;
        double r59833 = r59832 * r59809;
        double r59834 = -r59833;
        double r59835 = exp(r59834);
        double r59836 = 2.0;
        double r59837 = r59835 / r59836;
        double r59838 = r59826 / r59823;
        double r59839 = r59826 - r59838;
        double r59840 = 1.0;
        double r59841 = r59826 - r59823;
        double r59842 = r59809 * r59841;
        double r59843 = exp(r59842);
        double r59844 = r59843 * r59823;
        double r59845 = r59840 / r59844;
        double r59846 = r59827 / r59843;
        double r59847 = fma(r59827, r59845, r59846);
        double r59848 = fma(r59837, r59839, r59847);
        double r59849 = r59811 ? r59831 : r59848;
        return r59849;
}

Error

Bits error versus x

Bits error versus eps

Derivation

  1. Split input into 2 regimes
  2. if x < 5.45919403670261e-22

    1. Initial program 38.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. Simplified38.5

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

      \[\leadsto \color{blue}{\left(1.38778 \cdot 10^{-17} \cdot \frac{{x}^{3}}{\varepsilon} + 1\right) - 0.5 \cdot {x}^{2}}\]
    4. Simplified5.6

      \[\leadsto \color{blue}{\mathsf{fma}\left(1.38778 \cdot 10^{-17}, \frac{{x}^{3}}{\varepsilon}, 1 - 0.5 \cdot {x}^{2}\right)}\]
    5. Using strategy rm
    6. Applied add-cube-cbrt5.6

      \[\leadsto \mathsf{fma}\left(1.38778 \cdot 10^{-17}, \frac{{\color{blue}{\left(\left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) \cdot \sqrt[3]{x}\right)}}^{3}}{\varepsilon}, 1 - 0.5 \cdot {x}^{2}\right)\]
    7. Applied unpow-prod-down5.6

      \[\leadsto \mathsf{fma}\left(1.38778 \cdot 10^{-17}, \frac{\color{blue}{{\left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right)}^{3} \cdot {\left(\sqrt[3]{x}\right)}^{3}}}{\varepsilon}, 1 - 0.5 \cdot {x}^{2}\right)\]
    8. Applied associate-/l*5.6

      \[\leadsto \mathsf{fma}\left(1.38778 \cdot 10^{-17}, \color{blue}{\frac{{\left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right)}^{3}}{\frac{\varepsilon}{{\left(\sqrt[3]{x}\right)}^{3}}}}, 1 - 0.5 \cdot {x}^{2}\right)\]
    9. Simplified5.6

      \[\leadsto \mathsf{fma}\left(1.38778 \cdot 10^{-17}, \frac{{\left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right)}^{3}}{\color{blue}{\frac{\varepsilon}{x}}}, 1 - 0.5 \cdot {x}^{2}\right)\]
    10. Using strategy rm
    11. Applied add-log-exp4.1

      \[\leadsto \mathsf{fma}\left(1.38778 \cdot 10^{-17}, \frac{{\left(\color{blue}{\log \left(e^{\sqrt[3]{x}}\right)} \cdot \sqrt[3]{x}\right)}^{3}}{\frac{\varepsilon}{x}}, 1 - 0.5 \cdot {x}^{2}\right)\]
    12. Using strategy rm
    13. Applied add-cube-cbrt4.0

      \[\leadsto \mathsf{fma}\left(1.38778 \cdot 10^{-17}, \frac{{\left(\log \color{blue}{\left(\left(\sqrt[3]{e^{\sqrt[3]{x}}} \cdot \sqrt[3]{e^{\sqrt[3]{x}}}\right) \cdot \sqrt[3]{e^{\sqrt[3]{x}}}\right)} \cdot \sqrt[3]{x}\right)}^{3}}{\frac{\varepsilon}{x}}, 1 - 0.5 \cdot {x}^{2}\right)\]
    14. Applied log-prod4.0

      \[\leadsto \mathsf{fma}\left(1.38778 \cdot 10^{-17}, \frac{{\left(\color{blue}{\left(\log \left(\sqrt[3]{e^{\sqrt[3]{x}}} \cdot \sqrt[3]{e^{\sqrt[3]{x}}}\right) + \log \left(\sqrt[3]{e^{\sqrt[3]{x}}}\right)\right)} \cdot \sqrt[3]{x}\right)}^{3}}{\frac{\varepsilon}{x}}, 1 - 0.5 \cdot {x}^{2}\right)\]
    15. Simplified4.0

      \[\leadsto \mathsf{fma}\left(1.38778 \cdot 10^{-17}, \frac{{\left(\left(\color{blue}{2 \cdot \log \left(\sqrt[3]{e^{\sqrt[3]{x}}}\right)} + \log \left(\sqrt[3]{e^{\sqrt[3]{x}}}\right)\right) \cdot \sqrt[3]{x}\right)}^{3}}{\frac{\varepsilon}{x}}, 1 - 0.5 \cdot {x}^{2}\right)\]

    if 5.45919403670261e-22 < x

    1. Initial program 4.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. Simplified4.5

      \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{e^{-\left(1 + \varepsilon\right) \cdot x}}{2}, 1 - \frac{1}{\varepsilon}, \frac{1 + \frac{1}{\varepsilon}}{2 \cdot e^{\left(1 - \varepsilon\right) \cdot x}}\right)}\]
    3. Taylor expanded around inf 4.5

      \[\leadsto \mathsf{fma}\left(\frac{e^{-\left(1 + \varepsilon\right) \cdot x}}{2}, 1 - \frac{1}{\varepsilon}, \color{blue}{0.5 \cdot \frac{1}{e^{x \cdot \left(1 - \varepsilon\right)} \cdot \varepsilon} + 0.5 \cdot \frac{1}{e^{x \cdot \left(1 - \varepsilon\right)}}}\right)\]
    4. Simplified4.5

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le 5.4591940367026102 \cdot 10^{-22}:\\ \;\;\;\;\mathsf{fma}\left(1.38778 \cdot 10^{-17}, \frac{{\left(\left(2 \cdot \log \left(\sqrt[3]{e^{\sqrt[3]{x}}}\right) + \log \left(\sqrt[3]{e^{\sqrt[3]{x}}}\right)\right) \cdot \sqrt[3]{x}\right)}^{3}}{\frac{\varepsilon}{x}}, 1 - 0.5 \cdot {x}^{2}\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{e^{-\left(1 + \varepsilon\right) \cdot x}}{2}, 1 - \frac{1}{\varepsilon}, \mathsf{fma}\left(0.5, \frac{1}{e^{x \cdot \left(1 - \varepsilon\right)} \cdot \varepsilon}, \frac{0.5}{e^{x \cdot \left(1 - \varepsilon\right)}}\right)\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2020024 +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))