Average Error: 30.2 → 1.1
Time: 32.1s
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 10.85972191525816654689151619095355272293:\\ \;\;\;\;\frac{\mathsf{log1p}\left(\mathsf{expm1}\left(\mathsf{fma}\left({x}^{2}, 0.6666666666666667406815349750104360282421 \cdot x - 1, 2\right)\right)\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(1 + \varepsilon\right) \cdot x}}{\varepsilon} - e^{-x \cdot \left(1 + \varepsilon\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 10.85972191525816654689151619095355272293:\\
\;\;\;\;\frac{\mathsf{log1p}\left(\mathsf{expm1}\left(\mathsf{fma}\left({x}^{2}, 0.6666666666666667406815349750104360282421 \cdot x - 1, 2\right)\right)\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(1 + \varepsilon\right) \cdot x}}{\varepsilon} - e^{-x \cdot \left(1 + \varepsilon\right)}\right)}{2}\\

\end{array}
double f(double x, double eps) {
        double r43299 = 1.0;
        double r43300 = eps;
        double r43301 = r43299 / r43300;
        double r43302 = r43299 + r43301;
        double r43303 = r43299 - r43300;
        double r43304 = x;
        double r43305 = r43303 * r43304;
        double r43306 = -r43305;
        double r43307 = exp(r43306);
        double r43308 = r43302 * r43307;
        double r43309 = r43301 - r43299;
        double r43310 = r43299 + r43300;
        double r43311 = r43310 * r43304;
        double r43312 = -r43311;
        double r43313 = exp(r43312);
        double r43314 = r43309 * r43313;
        double r43315 = r43308 - r43314;
        double r43316 = 2.0;
        double r43317 = r43315 / r43316;
        return r43317;
}

double f(double x, double eps) {
        double r43318 = x;
        double r43319 = 10.859721915258167;
        bool r43320 = r43318 <= r43319;
        double r43321 = 2.0;
        double r43322 = pow(r43318, r43321);
        double r43323 = 0.6666666666666667;
        double r43324 = r43323 * r43318;
        double r43325 = 1.0;
        double r43326 = r43324 - r43325;
        double r43327 = 2.0;
        double r43328 = fma(r43322, r43326, r43327);
        double r43329 = expm1(r43328);
        double r43330 = log1p(r43329);
        double r43331 = r43330 / r43327;
        double r43332 = eps;
        double r43333 = r43325 / r43332;
        double r43334 = r43325 + r43333;
        double r43335 = r43325 - r43332;
        double r43336 = r43335 * r43318;
        double r43337 = -r43336;
        double r43338 = exp(r43337);
        double r43339 = r43334 * r43338;
        double r43340 = r43325 + r43332;
        double r43341 = r43340 * r43318;
        double r43342 = -r43341;
        double r43343 = exp(r43342);
        double r43344 = r43343 / r43332;
        double r43345 = r43318 * r43340;
        double r43346 = -r43345;
        double r43347 = exp(r43346);
        double r43348 = r43344 - r43347;
        double r43349 = r43325 * r43348;
        double r43350 = r43339 - r43349;
        double r43351 = r43350 / r43327;
        double r43352 = r43320 ? r43331 : r43351;
        return r43352;
}

Error

Bits error versus x

Bits error versus eps

Derivation

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

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

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

      \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(0.6666666666666667406815349750104360282421, {x}^{3}, 2\right) - 1 \cdot {x}^{2}}}{2}\]
    4. Using strategy rm
    5. Applied log1p-expm1-u1.3

      \[\leadsto \frac{\color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(\mathsf{fma}\left(0.6666666666666667406815349750104360282421, {x}^{3}, 2\right) - 1 \cdot {x}^{2}\right)\right)}}{2}\]
    6. Simplified1.3

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

    if 10.859721915258167 < x

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

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

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

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

Reproduce

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