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

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

\end{array}
double f(double x, double eps) {
        double r41406 = 1.0;
        double r41407 = eps;
        double r41408 = r41406 / r41407;
        double r41409 = r41406 + r41408;
        double r41410 = r41406 - r41407;
        double r41411 = x;
        double r41412 = r41410 * r41411;
        double r41413 = -r41412;
        double r41414 = exp(r41413);
        double r41415 = r41409 * r41414;
        double r41416 = r41408 - r41406;
        double r41417 = r41406 + r41407;
        double r41418 = r41417 * r41411;
        double r41419 = -r41418;
        double r41420 = exp(r41419);
        double r41421 = r41416 * r41420;
        double r41422 = r41415 - r41421;
        double r41423 = 2.0;
        double r41424 = r41422 / r41423;
        return r41424;
}

double f(double x, double eps) {
        double r41425 = x;
        double r41426 = 1.0640289263225317e-25;
        bool r41427 = r41425 <= r41426;
        double r41428 = 1.3877787807814457e-17;
        double r41429 = 3.0;
        double r41430 = pow(r41425, r41429);
        double r41431 = cbrt(r41430);
        double r41432 = exp(r41425);
        double r41433 = sqrt(r41432);
        double r41434 = log(r41433);
        double r41435 = r41434 + r41434;
        double r41436 = r41431 * r41435;
        double r41437 = eps;
        double r41438 = r41437 / r41425;
        double r41439 = r41436 / r41438;
        double r41440 = 1.0;
        double r41441 = 0.5;
        double r41442 = 2.0;
        double r41443 = pow(r41425, r41442);
        double r41444 = r41441 * r41443;
        double r41445 = r41440 - r41444;
        double r41446 = fma(r41428, r41439, r41445);
        double r41447 = r41440 + r41437;
        double r41448 = r41447 * r41425;
        double r41449 = exp(r41448);
        double r41450 = log(r41449);
        double r41451 = -r41450;
        double r41452 = exp(r41451);
        double r41453 = 2.0;
        double r41454 = r41452 / r41453;
        double r41455 = r41440 / r41437;
        double r41456 = r41440 - r41455;
        double r41457 = r41440 + r41455;
        double r41458 = r41440 - r41437;
        double r41459 = r41458 * r41425;
        double r41460 = exp(r41459);
        double r41461 = r41453 * r41460;
        double r41462 = r41457 / r41461;
        double r41463 = fma(r41454, r41456, r41462);
        double r41464 = r41427 ? r41446 : r41463;
        return r41464;
}

Error

Bits error versus x

Bits error versus eps

Derivation

  1. Split input into 2 regimes
  2. if x < 1.0640289263225317e-25

    1. Initial program 38.3

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

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

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

      \[\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-cbrt6.1

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

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

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

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

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

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

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

    if 1.0640289263225317e-25 < x

    1. Initial program 4.6

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

      \[\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-log-exp4.6

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

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

Reproduce

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