Average Error: 30.1 → 0.9
Time: 1.4m
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 240.6932575900809:\\ \;\;\;\;\frac{(\left(\left(x \cdot x\right) \cdot x\right) \cdot \frac{2}{3} + \left(2 - x \cdot x\right))_*}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(\left(e^{-\left(x + x \cdot \varepsilon\right)} + e^{x \cdot \varepsilon - x}\right) + \frac{e^{x \cdot \varepsilon - x}}{\varepsilon}\right) - \frac{e^{-\left(x + x \cdot \varepsilon\right)}}{\varepsilon}}{2}\\ \end{array}\]
double f(double x, double eps) {
        double r7597356 = 1.0;
        double r7597357 = eps;
        double r7597358 = r7597356 / r7597357;
        double r7597359 = r7597356 + r7597358;
        double r7597360 = r7597356 - r7597357;
        double r7597361 = x;
        double r7597362 = r7597360 * r7597361;
        double r7597363 = -r7597362;
        double r7597364 = exp(r7597363);
        double r7597365 = r7597359 * r7597364;
        double r7597366 = r7597358 - r7597356;
        double r7597367 = r7597356 + r7597357;
        double r7597368 = r7597367 * r7597361;
        double r7597369 = -r7597368;
        double r7597370 = exp(r7597369);
        double r7597371 = r7597366 * r7597370;
        double r7597372 = r7597365 - r7597371;
        double r7597373 = 2.0;
        double r7597374 = r7597372 / r7597373;
        return r7597374;
}

double f(double x, double eps) {
        double r7597375 = x;
        double r7597376 = 240.6932575900809;
        bool r7597377 = r7597375 <= r7597376;
        double r7597378 = r7597375 * r7597375;
        double r7597379 = r7597378 * r7597375;
        double r7597380 = 0.6666666666666666;
        double r7597381 = 2.0;
        double r7597382 = r7597381 - r7597378;
        double r7597383 = fma(r7597379, r7597380, r7597382);
        double r7597384 = r7597383 / r7597381;
        double r7597385 = eps;
        double r7597386 = r7597375 * r7597385;
        double r7597387 = r7597375 + r7597386;
        double r7597388 = -r7597387;
        double r7597389 = exp(r7597388);
        double r7597390 = r7597386 - r7597375;
        double r7597391 = exp(r7597390);
        double r7597392 = r7597389 + r7597391;
        double r7597393 = r7597391 / r7597385;
        double r7597394 = r7597392 + r7597393;
        double r7597395 = r7597389 / r7597385;
        double r7597396 = r7597394 - r7597395;
        double r7597397 = r7597396 / r7597381;
        double r7597398 = r7597377 ? r7597384 : r7597397;
        return r7597398;
}

\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 240.6932575900809:\\
\;\;\;\;\frac{(\left(\left(x \cdot x\right) \cdot x\right) \cdot \frac{2}{3} + \left(2 - x \cdot x\right))_*}{2}\\

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

\end{array}

Error

Bits error versus x

Bits error versus eps

Derivation

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

    1. Initial program 39.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. Taylor expanded around 0 1.1

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

      \[\leadsto \frac{\color{blue}{(\left(x \cdot \left(x \cdot x\right)\right) \cdot \frac{2}{3} + \left(2 - x \cdot x\right))_*}}{2}\]

    if 240.6932575900809 < 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. Taylor expanded around -inf 0.1

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le 240.6932575900809:\\ \;\;\;\;\frac{(\left(\left(x \cdot x\right) \cdot x\right) \cdot \frac{2}{3} + \left(2 - x \cdot x\right))_*}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(\left(e^{-\left(x + x \cdot \varepsilon\right)} + e^{x \cdot \varepsilon - x}\right) + \frac{e^{x \cdot \varepsilon - x}}{\varepsilon}\right) - \frac{e^{-\left(x + x \cdot \varepsilon\right)}}{\varepsilon}}{2}\\ \end{array}\]

Reproduce

herbie shell --seed 2019102 +o rules:numerics
(FPCore (x eps)
  :name "NMSE Section 6.1 mentioned, A"
  (/ (- (* (+ 1 (/ 1 eps)) (exp (- (* (- 1 eps) x)))) (* (- (/ 1 eps) 1) (exp (- (* (+ 1 eps) x))))) 2))