Average Error: 29.3 → 4.2
Time: 7.3s
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 0.07014539269035792445894372804104932583869:\\ \;\;\;\;\mathsf{fma}\left(1.387778780781445675529539585113525390625 \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}, \frac{\sqrt[3]{1 + \frac{1}{\varepsilon}} \cdot \sqrt[3]{1 + \frac{1}{\varepsilon}}}{2} \cdot \frac{\sqrt[3]{1 + \frac{1}{\varepsilon}}}{e^{x \cdot \left(1 - \varepsilon\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 0.07014539269035792445894372804104932583869:\\
\;\;\;\;\mathsf{fma}\left(1.387778780781445675529539585113525390625 \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}, \frac{\sqrt[3]{1 + \frac{1}{\varepsilon}} \cdot \sqrt[3]{1 + \frac{1}{\varepsilon}}}{2} \cdot \frac{\sqrt[3]{1 + \frac{1}{\varepsilon}}}{e^{x \cdot \left(1 - \varepsilon\right)}}\right)\\

\end{array}
double f(double x, double eps) {
        double r44789 = 1.0;
        double r44790 = eps;
        double r44791 = r44789 / r44790;
        double r44792 = r44789 + r44791;
        double r44793 = r44789 - r44790;
        double r44794 = x;
        double r44795 = r44793 * r44794;
        double r44796 = -r44795;
        double r44797 = exp(r44796);
        double r44798 = r44792 * r44797;
        double r44799 = r44791 - r44789;
        double r44800 = r44789 + r44790;
        double r44801 = r44800 * r44794;
        double r44802 = -r44801;
        double r44803 = exp(r44802);
        double r44804 = r44799 * r44803;
        double r44805 = r44798 - r44804;
        double r44806 = 2.0;
        double r44807 = r44805 / r44806;
        return r44807;
}

double f(double x, double eps) {
        double r44808 = x;
        double r44809 = 0.07014539269035792;
        bool r44810 = r44808 <= r44809;
        double r44811 = 1.3877787807814457e-17;
        double r44812 = 2.0;
        double r44813 = cbrt(r44808);
        double r44814 = exp(r44813);
        double r44815 = cbrt(r44814);
        double r44816 = log(r44815);
        double r44817 = r44812 * r44816;
        double r44818 = r44817 + r44816;
        double r44819 = r44818 * r44813;
        double r44820 = 3.0;
        double r44821 = pow(r44819, r44820);
        double r44822 = eps;
        double r44823 = r44822 / r44808;
        double r44824 = r44821 / r44823;
        double r44825 = 1.0;
        double r44826 = 0.5;
        double r44827 = pow(r44808, r44812);
        double r44828 = r44826 * r44827;
        double r44829 = r44825 - r44828;
        double r44830 = fma(r44811, r44824, r44829);
        double r44831 = r44825 + r44822;
        double r44832 = r44831 * r44808;
        double r44833 = -r44832;
        double r44834 = exp(r44833);
        double r44835 = 2.0;
        double r44836 = r44834 / r44835;
        double r44837 = r44825 / r44822;
        double r44838 = r44825 - r44837;
        double r44839 = r44825 + r44837;
        double r44840 = cbrt(r44839);
        double r44841 = r44840 * r44840;
        double r44842 = r44841 / r44835;
        double r44843 = r44825 - r44822;
        double r44844 = r44808 * r44843;
        double r44845 = exp(r44844);
        double r44846 = r44840 / r44845;
        double r44847 = r44842 * r44846;
        double r44848 = fma(r44836, r44838, r44847);
        double r44849 = r44810 ? r44830 : r44848;
        return r44849;
}

Error

Bits error versus x

Bits error versus eps

Derivation

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

    1. Initial program 38.9

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

      \[\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 7.2

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

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

      \[\leadsto \mathsf{fma}\left(1.387778780781445675529539585113525390625 \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-down7.2

      \[\leadsto \mathsf{fma}\left(1.387778780781445675529539585113525390625 \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*7.2

      \[\leadsto \mathsf{fma}\left(1.387778780781445675529539585113525390625 \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. Simplified7.2

      \[\leadsto \mathsf{fma}\left(1.387778780781445675529539585113525390625 \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-exp5.5

      \[\leadsto \mathsf{fma}\left(1.387778780781445675529539585113525390625 \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-cbrt5.3

      \[\leadsto \mathsf{fma}\left(1.387778780781445675529539585113525390625 \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-prod5.3

      \[\leadsto \mathsf{fma}\left(1.387778780781445675529539585113525390625 \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. Simplified5.3

      \[\leadsto \mathsf{fma}\left(1.387778780781445675529539585113525390625 \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 0.07014539269035792 < x

    1. Initial program 1.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. Simplified1.0

      \[\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. Using strategy rm
    4. Applied add-cube-cbrt1.0

      \[\leadsto \mathsf{fma}\left(\frac{e^{-\left(1 + \varepsilon\right) \cdot x}}{2}, 1 - \frac{1}{\varepsilon}, \frac{\color{blue}{\left(\sqrt[3]{1 + \frac{1}{\varepsilon}} \cdot \sqrt[3]{1 + \frac{1}{\varepsilon}}\right) \cdot \sqrt[3]{1 + \frac{1}{\varepsilon}}}}{2 \cdot e^{\left(1 - \varepsilon\right) \cdot x}}\right)\]
    5. Applied times-frac1.0

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

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

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

Reproduce

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