Average Error: 29.1 → 1.1
Time: 9.4s
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 130.404033395790208:\\ \;\;\;\;\frac{\mathsf{fma}\left({x}^{3}, 0.66666666666666674, 2 - 1 \cdot {x}^{2}\right)}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot e^{-\left(1 - \varepsilon\right) \cdot x} - 1 \cdot \left(\frac{e^{-\left(x \cdot \varepsilon + 1 \cdot x\right)}}{\varepsilon} - \frac{1}{e^{\mathsf{fma}\left(x, \varepsilon, 1 \cdot x\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 130.404033395790208:\\
\;\;\;\;\frac{\mathsf{fma}\left({x}^{3}, 0.66666666666666674, 2 - 1 \cdot {x}^{2}\right)}{2}\\

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

\end{array}
double f(double x, double eps) {
        double r56306 = 1.0;
        double r56307 = eps;
        double r56308 = r56306 / r56307;
        double r56309 = r56306 + r56308;
        double r56310 = r56306 - r56307;
        double r56311 = x;
        double r56312 = r56310 * r56311;
        double r56313 = -r56312;
        double r56314 = exp(r56313);
        double r56315 = r56309 * r56314;
        double r56316 = r56308 - r56306;
        double r56317 = r56306 + r56307;
        double r56318 = r56317 * r56311;
        double r56319 = -r56318;
        double r56320 = exp(r56319);
        double r56321 = r56316 * r56320;
        double r56322 = r56315 - r56321;
        double r56323 = 2.0;
        double r56324 = r56322 / r56323;
        return r56324;
}

double f(double x, double eps) {
        double r56325 = x;
        double r56326 = 130.4040333957902;
        bool r56327 = r56325 <= r56326;
        double r56328 = 3.0;
        double r56329 = pow(r56325, r56328);
        double r56330 = 0.6666666666666667;
        double r56331 = 2.0;
        double r56332 = 1.0;
        double r56333 = 2.0;
        double r56334 = pow(r56325, r56333);
        double r56335 = r56332 * r56334;
        double r56336 = r56331 - r56335;
        double r56337 = fma(r56329, r56330, r56336);
        double r56338 = r56337 / r56331;
        double r56339 = eps;
        double r56340 = r56332 / r56339;
        double r56341 = r56332 + r56340;
        double r56342 = r56332 - r56339;
        double r56343 = r56342 * r56325;
        double r56344 = -r56343;
        double r56345 = exp(r56344);
        double r56346 = r56341 * r56345;
        double r56347 = r56325 * r56339;
        double r56348 = r56332 * r56325;
        double r56349 = r56347 + r56348;
        double r56350 = -r56349;
        double r56351 = exp(r56350);
        double r56352 = r56351 / r56339;
        double r56353 = 1.0;
        double r56354 = fma(r56325, r56339, r56348);
        double r56355 = exp(r56354);
        double r56356 = r56353 / r56355;
        double r56357 = r56352 - r56356;
        double r56358 = r56332 * r56357;
        double r56359 = r56346 - r56358;
        double r56360 = r56359 / r56331;
        double r56361 = r56327 ? r56338 : r56360;
        return r56361;
}

Error

Bits error versus x

Bits error versus eps

Derivation

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

    1. Initial program 38.8

      \[\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(0.66666666666666674 \cdot {x}^{3} + 2\right) - 1 \cdot {x}^{2}}}{2}\]
    3. Simplified1.4

      \[\leadsto \frac{\color{blue}{\mathsf{fma}\left({x}^{3}, 0.66666666666666674, 2 - 1 \cdot {x}^{2}\right)}}{2}\]

    if 130.4040333957902 < 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. Taylor expanded around inf 0.2

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

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

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

Reproduce

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