Average Error: 10.2 → 0.1
Time: 15.3s
Precision: 64
\[\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\]
\[\begin{array}{l} \mathbf{if}\;x \le -109.218011094796353 \lor \neg \left(x \le 115.29908004264922\right):\\ \;\;\;\;\mathsf{fma}\left(2, \frac{1}{{x}^{7}}, \mathsf{fma}\left(2, \frac{1}{{x}^{5}}, \frac{1}{x \cdot x} \cdot \frac{2}{x}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \mathsf{log1p}\left(\mathsf{expm1}\left(\frac{1}{x - 1}\right)\right)\\ \end{array}\]
\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}
\begin{array}{l}
\mathbf{if}\;x \le -109.218011094796353 \lor \neg \left(x \le 115.29908004264922\right):\\
\;\;\;\;\mathsf{fma}\left(2, \frac{1}{{x}^{7}}, \mathsf{fma}\left(2, \frac{1}{{x}^{5}}, \frac{1}{x \cdot x} \cdot \frac{2}{x}\right)\right)\\

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

\end{array}
double f(double x) {
        double r386 = 1.0;
        double r387 = x;
        double r388 = r387 + r386;
        double r389 = r386 / r388;
        double r390 = 2.0;
        double r391 = r390 / r387;
        double r392 = r389 - r391;
        double r393 = r387 - r386;
        double r394 = r386 / r393;
        double r395 = r392 + r394;
        return r395;
}

double f(double x) {
        double r396 = x;
        double r397 = -109.21801109479635;
        bool r398 = r396 <= r397;
        double r399 = 115.29908004264922;
        bool r400 = r396 <= r399;
        double r401 = !r400;
        bool r402 = r398 || r401;
        double r403 = 2.0;
        double r404 = 1.0;
        double r405 = 7.0;
        double r406 = pow(r396, r405);
        double r407 = r404 / r406;
        double r408 = 5.0;
        double r409 = pow(r396, r408);
        double r410 = r404 / r409;
        double r411 = r396 * r396;
        double r412 = r404 / r411;
        double r413 = r403 / r396;
        double r414 = r412 * r413;
        double r415 = fma(r403, r410, r414);
        double r416 = fma(r403, r407, r415);
        double r417 = 1.0;
        double r418 = r396 + r417;
        double r419 = r417 / r418;
        double r420 = r419 - r413;
        double r421 = r396 - r417;
        double r422 = r417 / r421;
        double r423 = expm1(r422);
        double r424 = log1p(r423);
        double r425 = r420 + r424;
        double r426 = r402 ? r416 : r425;
        return r426;
}

Error

Bits error versus x

Target

Original10.2
Target0.3
Herbie0.1
\[\frac{2}{x \cdot \left(x \cdot x - 1\right)}\]

Derivation

  1. Split input into 2 regimes
  2. if x < -109.21801109479635 or 115.29908004264922 < x

    1. Initial program 19.9

      \[\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\]
    2. Taylor expanded around inf 0.5

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

      \[\leadsto \color{blue}{\mathsf{fma}\left(2, \frac{1}{{x}^{7}}, \mathsf{fma}\left(2, \frac{1}{{x}^{5}}, \frac{2}{{x}^{3}}\right)\right)}\]
    4. Using strategy rm
    5. Applied add-cube-cbrt1.2

      \[\leadsto \mathsf{fma}\left(2, \frac{1}{{x}^{7}}, \mathsf{fma}\left(2, \frac{1}{{x}^{5}}, \frac{2}{{\color{blue}{\left(\left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) \cdot \sqrt[3]{x}\right)}}^{3}}\right)\right)\]
    6. Applied unpow-prod-down1.2

      \[\leadsto \mathsf{fma}\left(2, \frac{1}{{x}^{7}}, \mathsf{fma}\left(2, \frac{1}{{x}^{5}}, \frac{2}{\color{blue}{{\left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right)}^{3} \cdot {\left(\sqrt[3]{x}\right)}^{3}}}\right)\right)\]
    7. Applied *-un-lft-identity1.2

      \[\leadsto \mathsf{fma}\left(2, \frac{1}{{x}^{7}}, \mathsf{fma}\left(2, \frac{1}{{x}^{5}}, \frac{\color{blue}{1 \cdot 2}}{{\left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right)}^{3} \cdot {\left(\sqrt[3]{x}\right)}^{3}}\right)\right)\]
    8. Applied times-frac0.8

      \[\leadsto \mathsf{fma}\left(2, \frac{1}{{x}^{7}}, \mathsf{fma}\left(2, \frac{1}{{x}^{5}}, \color{blue}{\frac{1}{{\left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right)}^{3}} \cdot \frac{2}{{\left(\sqrt[3]{x}\right)}^{3}}}\right)\right)\]
    9. Simplified0.4

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

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

    if -109.21801109479635 < x < 115.29908004264922

    1. Initial program 0.1

      \[\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\]
    2. Using strategy rm
    3. Applied log1p-expm1-u0.1

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -109.218011094796353 \lor \neg \left(x \le 115.29908004264922\right):\\ \;\;\;\;\mathsf{fma}\left(2, \frac{1}{{x}^{7}}, \mathsf{fma}\left(2, \frac{1}{{x}^{5}}, \frac{1}{x \cdot x} \cdot \frac{2}{x}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \mathsf{log1p}\left(\mathsf{expm1}\left(\frac{1}{x - 1}\right)\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2020025 +o rules:numerics
(FPCore (x)
  :name "3frac (problem 3.3.3)"
  :precision binary64

  :herbie-target
  (/ 2 (* x (- (* x x) 1)))

  (+ (- (/ 1 (+ x 1)) (/ 2 x)) (/ 1 (- x 1))))