Average Error: 14.3 → 0.1
Time: 13.4s
Precision: 64
\[\frac{1}{x + 1} - \frac{1}{x}\]
\[\begin{array}{l} \mathbf{if}\;x \le -10864.73322164679302659351378679275512695 \lor \neg \left(x \le 9917.966055990473250858485698699951171875\right):\\ \;\;\;\;\frac{1}{{x}^{3}} - \left(\frac{1}{{x}^{4}} + \frac{\frac{1}{x}}{x}\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{1}{{x}^{3} + {1}^{3}}, x \cdot x + \left(1 \cdot 1 - x \cdot 1\right), -\frac{1}{x}\right)\\ \end{array}\]
\frac{1}{x + 1} - \frac{1}{x}
\begin{array}{l}
\mathbf{if}\;x \le -10864.73322164679302659351378679275512695 \lor \neg \left(x \le 9917.966055990473250858485698699951171875\right):\\
\;\;\;\;\frac{1}{{x}^{3}} - \left(\frac{1}{{x}^{4}} + \frac{\frac{1}{x}}{x}\right)\\

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{{x}^{3} + {1}^{3}}, x \cdot x + \left(1 \cdot 1 - x \cdot 1\right), -\frac{1}{x}\right)\\

\end{array}
double f(double x) {
        double r32474 = 1.0;
        double r32475 = x;
        double r32476 = r32475 + r32474;
        double r32477 = r32474 / r32476;
        double r32478 = r32474 / r32475;
        double r32479 = r32477 - r32478;
        return r32479;
}

double f(double x) {
        double r32480 = x;
        double r32481 = -10864.733221646793;
        bool r32482 = r32480 <= r32481;
        double r32483 = 9917.966055990473;
        bool r32484 = r32480 <= r32483;
        double r32485 = !r32484;
        bool r32486 = r32482 || r32485;
        double r32487 = 1.0;
        double r32488 = 3.0;
        double r32489 = pow(r32480, r32488);
        double r32490 = r32487 / r32489;
        double r32491 = 4.0;
        double r32492 = pow(r32480, r32491);
        double r32493 = r32487 / r32492;
        double r32494 = r32487 / r32480;
        double r32495 = r32494 / r32480;
        double r32496 = r32493 + r32495;
        double r32497 = r32490 - r32496;
        double r32498 = pow(r32487, r32488);
        double r32499 = r32489 + r32498;
        double r32500 = r32487 / r32499;
        double r32501 = r32480 * r32480;
        double r32502 = r32487 * r32487;
        double r32503 = r32480 * r32487;
        double r32504 = r32502 - r32503;
        double r32505 = r32501 + r32504;
        double r32506 = -r32494;
        double r32507 = fma(r32500, r32505, r32506);
        double r32508 = r32486 ? r32497 : r32507;
        return r32508;
}

Error

Bits error versus x

Derivation

  1. Split input into 2 regimes
  2. if x < -10864.733221646793 or 9917.966055990473 < x

    1. Initial program 29.2

      \[\frac{1}{x + 1} - \frac{1}{x}\]
    2. Taylor expanded around inf 0.8

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

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

      \[\leadsto \frac{1}{{x}^{3}} - \left(\frac{1}{{x}^{4}} + \color{blue}{\frac{\frac{1}{x}}{x}}\right)\]

    if -10864.733221646793 < x < 9917.966055990473

    1. Initial program 0.1

      \[\frac{1}{x + 1} - \frac{1}{x}\]
    2. Using strategy rm
    3. Applied flip3-+0.1

      \[\leadsto \frac{1}{\color{blue}{\frac{{x}^{3} + {1}^{3}}{x \cdot x + \left(1 \cdot 1 - x \cdot 1\right)}}} - \frac{1}{x}\]
    4. Applied associate-/r/0.1

      \[\leadsto \color{blue}{\frac{1}{{x}^{3} + {1}^{3}} \cdot \left(x \cdot x + \left(1 \cdot 1 - x \cdot 1\right)\right)} - \frac{1}{x}\]
    5. Applied fma-neg0.1

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -10864.73322164679302659351378679275512695 \lor \neg \left(x \le 9917.966055990473250858485698699951171875\right):\\ \;\;\;\;\frac{1}{{x}^{3}} - \left(\frac{1}{{x}^{4}} + \frac{\frac{1}{x}}{x}\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{1}{{x}^{3} + {1}^{3}}, x \cdot x + \left(1 \cdot 1 - x \cdot 1\right), -\frac{1}{x}\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019208 +o rules:numerics
(FPCore (x)
  :name "2frac (problem 3.3.1)"
  :precision binary64
  (- (/ 1 (+ x 1)) (/ 1 x)))