Average Error: 9.6 → 0.9
Time: 27.1s
Precision: 64
\[\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\]
\[\begin{array}{l} \mathbf{if}\;\frac{1}{x - 1} + \left(\frac{1}{x + 1} - \frac{2}{x}\right) \le -7201661234884042:\\ \;\;\;\;\left(1 - \mathsf{fma}\left(1, x, \frac{2}{x}\right)\right) + \frac{1}{x - 1}\\ \mathbf{elif}\;\frac{1}{x - 1} + \left(\frac{1}{x + 1} - \frac{2}{x}\right) \le 1.398114847419446027387834874389227479696 \cdot 10^{-9}:\\ \;\;\;\;\frac{2}{{x}^{5}} + \left(\frac{2}{{x}^{7}} + \frac{\frac{\frac{2}{x}}{x}}{x}\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{x - 1} + \left(\frac{1}{x + 1} - \frac{2}{x}\right)\\ \end{array}\]
\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}
\begin{array}{l}
\mathbf{if}\;\frac{1}{x - 1} + \left(\frac{1}{x + 1} - \frac{2}{x}\right) \le -7201661234884042:\\
\;\;\;\;\left(1 - \mathsf{fma}\left(1, x, \frac{2}{x}\right)\right) + \frac{1}{x - 1}\\

\mathbf{elif}\;\frac{1}{x - 1} + \left(\frac{1}{x + 1} - \frac{2}{x}\right) \le 1.398114847419446027387834874389227479696 \cdot 10^{-9}:\\
\;\;\;\;\frac{2}{{x}^{5}} + \left(\frac{2}{{x}^{7}} + \frac{\frac{\frac{2}{x}}{x}}{x}\right)\\

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

\end{array}
double f(double x) {
        double r4431388 = 1.0;
        double r4431389 = x;
        double r4431390 = r4431389 + r4431388;
        double r4431391 = r4431388 / r4431390;
        double r4431392 = 2.0;
        double r4431393 = r4431392 / r4431389;
        double r4431394 = r4431391 - r4431393;
        double r4431395 = r4431389 - r4431388;
        double r4431396 = r4431388 / r4431395;
        double r4431397 = r4431394 + r4431396;
        return r4431397;
}

double f(double x) {
        double r4431398 = 1.0;
        double r4431399 = x;
        double r4431400 = r4431399 - r4431398;
        double r4431401 = r4431398 / r4431400;
        double r4431402 = r4431399 + r4431398;
        double r4431403 = r4431398 / r4431402;
        double r4431404 = 2.0;
        double r4431405 = r4431404 / r4431399;
        double r4431406 = r4431403 - r4431405;
        double r4431407 = r4431401 + r4431406;
        double r4431408 = -7201661234884042.0;
        bool r4431409 = r4431407 <= r4431408;
        double r4431410 = fma(r4431398, r4431399, r4431405);
        double r4431411 = r4431398 - r4431410;
        double r4431412 = r4431411 + r4431401;
        double r4431413 = 1.398114847419446e-09;
        bool r4431414 = r4431407 <= r4431413;
        double r4431415 = 5.0;
        double r4431416 = pow(r4431399, r4431415);
        double r4431417 = r4431404 / r4431416;
        double r4431418 = 7.0;
        double r4431419 = pow(r4431399, r4431418);
        double r4431420 = r4431404 / r4431419;
        double r4431421 = r4431405 / r4431399;
        double r4431422 = r4431421 / r4431399;
        double r4431423 = r4431420 + r4431422;
        double r4431424 = r4431417 + r4431423;
        double r4431425 = r4431414 ? r4431424 : r4431407;
        double r4431426 = r4431409 ? r4431412 : r4431425;
        return r4431426;
}

Error

Bits error versus x

Target

Original9.6
Target0.2
Herbie0.9
\[\frac{2}{x \cdot \left(x \cdot x - 1\right)}\]

Derivation

  1. Split input into 3 regimes
  2. if (+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0))) < -7201661234884042.0

    1. Initial program 0.0

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

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

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

    if -7201661234884042.0 < (+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0))) < 1.398114847419446e-09

    1. Initial program 19.2

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

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

      \[\leadsto \color{blue}{\left(\frac{\frac{2}{x}}{x \cdot x} + \frac{2}{{x}^{7}}\right) + \frac{2}{{x}^{5}}}\]
    4. Using strategy rm
    5. Applied associate-/r*1.8

      \[\leadsto \left(\color{blue}{\frac{\frac{\frac{2}{x}}{x}}{x}} + \frac{2}{{x}^{7}}\right) + \frac{2}{{x}^{5}}\]

    if 1.398114847419446e-09 < (+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0)))

    1. Initial program 0.1

      \[\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification0.9

    \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{1}{x - 1} + \left(\frac{1}{x + 1} - \frac{2}{x}\right) \le -7201661234884042:\\ \;\;\;\;\left(1 - \mathsf{fma}\left(1, x, \frac{2}{x}\right)\right) + \frac{1}{x - 1}\\ \mathbf{elif}\;\frac{1}{x - 1} + \left(\frac{1}{x + 1} - \frac{2}{x}\right) \le 1.398114847419446027387834874389227479696 \cdot 10^{-9}:\\ \;\;\;\;\frac{2}{{x}^{5}} + \left(\frac{2}{{x}^{7}} + \frac{\frac{\frac{2}{x}}{x}}{x}\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{x - 1} + \left(\frac{1}{x + 1} - \frac{2}{x}\right)\\ \end{array}\]

Reproduce

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

  :herbie-target
  (/ 2.0 (* x (- (* x x) 1.0)))

  (+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0))))