Average Error: 29.7 → 1.0
Time: 27.0s
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 299.418440145869169555226108059287071228:\\ \;\;\;\;\frac{\sqrt[3]{{\left(\sqrt{\mathsf{fma}\left({x}^{3}, 0.6666666666666667406815349750104360282421, 2\right)} \cdot \sqrt{\mathsf{fma}\left({x}^{3}, 0.6666666666666667406815349750104360282421, 2\right)}\right)}^{3}} - 1 \cdot {x}^{2}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\mathsf{expm1}\left(\mathsf{log1p}\left(\frac{\frac{1}{\varepsilon} + 1}{e^{\left(1 - \varepsilon\right) \cdot x}} - \frac{\frac{1}{\varepsilon} - 1}{e^{\left(1 + \varepsilon\right) \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 299.418440145869169555226108059287071228:\\
\;\;\;\;\frac{\sqrt[3]{{\left(\sqrt{\mathsf{fma}\left({x}^{3}, 0.6666666666666667406815349750104360282421, 2\right)} \cdot \sqrt{\mathsf{fma}\left({x}^{3}, 0.6666666666666667406815349750104360282421, 2\right)}\right)}^{3}} - 1 \cdot {x}^{2}}{2}\\

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

\end{array}
double f(double x, double eps) {
        double r40315 = 1.0;
        double r40316 = eps;
        double r40317 = r40315 / r40316;
        double r40318 = r40315 + r40317;
        double r40319 = r40315 - r40316;
        double r40320 = x;
        double r40321 = r40319 * r40320;
        double r40322 = -r40321;
        double r40323 = exp(r40322);
        double r40324 = r40318 * r40323;
        double r40325 = r40317 - r40315;
        double r40326 = r40315 + r40316;
        double r40327 = r40326 * r40320;
        double r40328 = -r40327;
        double r40329 = exp(r40328);
        double r40330 = r40325 * r40329;
        double r40331 = r40324 - r40330;
        double r40332 = 2.0;
        double r40333 = r40331 / r40332;
        return r40333;
}

double f(double x, double eps) {
        double r40334 = x;
        double r40335 = 299.41844014586917;
        bool r40336 = r40334 <= r40335;
        double r40337 = 3.0;
        double r40338 = pow(r40334, r40337);
        double r40339 = 0.6666666666666667;
        double r40340 = 2.0;
        double r40341 = fma(r40338, r40339, r40340);
        double r40342 = sqrt(r40341);
        double r40343 = r40342 * r40342;
        double r40344 = pow(r40343, r40337);
        double r40345 = cbrt(r40344);
        double r40346 = 1.0;
        double r40347 = 2.0;
        double r40348 = pow(r40334, r40347);
        double r40349 = r40346 * r40348;
        double r40350 = r40345 - r40349;
        double r40351 = r40350 / r40340;
        double r40352 = eps;
        double r40353 = r40346 / r40352;
        double r40354 = r40353 + r40346;
        double r40355 = r40346 - r40352;
        double r40356 = r40355 * r40334;
        double r40357 = exp(r40356);
        double r40358 = r40354 / r40357;
        double r40359 = r40353 - r40346;
        double r40360 = r40346 + r40352;
        double r40361 = r40360 * r40334;
        double r40362 = exp(r40361);
        double r40363 = r40359 / r40362;
        double r40364 = r40358 - r40363;
        double r40365 = log1p(r40364);
        double r40366 = expm1(r40365);
        double r40367 = r40366 / r40340;
        double r40368 = r40336 ? r40351 : r40367;
        return r40368;
}

Error

Bits error versus x

Bits error versus eps

Derivation

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

    1. Initial program 39.4

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

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

      \[\leadsto \frac{\sqrt[3]{\color{blue}{{\left(\mathsf{fma}\left(0.6666666666666667406815349750104360282421, {x}^{3}, 2\right)\right)}^{3}}} - 1 \cdot {x}^{2}}{2}\]
    7. Using strategy rm
    8. Applied add-sqr-sqrt1.3

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

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

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

    if 299.41844014586917 < 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. Using strategy rm
    3. Applied expm1-log1p-u0.2

      \[\leadsto \frac{\color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\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}\right)\right)}}{2}\]
    4. Simplified0.2

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

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

Reproduce

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