Average Error: 9.8 → 0.3
Time: 19.3s
Precision: 64
\[\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\]
\[\begin{array}{l} \mathbf{if}\;x \le -139.6738048598509180919791106134653091431 \lor \neg \left(x \le 129.3018377268199685659055830910801887512\right):\\ \;\;\;\;\mathsf{fma}\left(2, \frac{1}{{x}^{7}}, \mathsf{fma}\left(2, \frac{1}{{x}^{5}}, \frac{2}{{x}^{3}}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{\mathsf{fma}\left(1 \cdot x - \left(x + 1\right) \cdot 2, x - 1, \left(\left(x + 1\right) \cdot x\right) \cdot 1\right)}{\left(\left(x + 1\right) \cdot x\right) \cdot \left(x - 1\right)}\\ \end{array}\]
\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}
\begin{array}{l}
\mathbf{if}\;x \le -139.6738048598509180919791106134653091431 \lor \neg \left(x \le 129.3018377268199685659055830910801887512\right):\\
\;\;\;\;\mathsf{fma}\left(2, \frac{1}{{x}^{7}}, \mathsf{fma}\left(2, \frac{1}{{x}^{5}}, \frac{2}{{x}^{3}}\right)\right)\\

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

\end{array}
double f(double x) {
        double r244536 = 1.0;
        double r244537 = x;
        double r244538 = r244537 + r244536;
        double r244539 = r244536 / r244538;
        double r244540 = 2.0;
        double r244541 = r244540 / r244537;
        double r244542 = r244539 - r244541;
        double r244543 = r244537 - r244536;
        double r244544 = r244536 / r244543;
        double r244545 = r244542 + r244544;
        return r244545;
}

double f(double x) {
        double r244546 = x;
        double r244547 = -139.67380485985092;
        bool r244548 = r244546 <= r244547;
        double r244549 = 129.30183772681997;
        bool r244550 = r244546 <= r244549;
        double r244551 = !r244550;
        bool r244552 = r244548 || r244551;
        double r244553 = 2.0;
        double r244554 = 1.0;
        double r244555 = 7.0;
        double r244556 = pow(r244546, r244555);
        double r244557 = r244554 / r244556;
        double r244558 = 5.0;
        double r244559 = pow(r244546, r244558);
        double r244560 = r244554 / r244559;
        double r244561 = 3.0;
        double r244562 = pow(r244546, r244561);
        double r244563 = r244553 / r244562;
        double r244564 = fma(r244553, r244560, r244563);
        double r244565 = fma(r244553, r244557, r244564);
        double r244566 = 1.0;
        double r244567 = r244566 * r244546;
        double r244568 = r244546 + r244566;
        double r244569 = r244568 * r244553;
        double r244570 = r244567 - r244569;
        double r244571 = r244546 - r244566;
        double r244572 = r244568 * r244546;
        double r244573 = r244572 * r244566;
        double r244574 = fma(r244570, r244571, r244573);
        double r244575 = r244572 * r244571;
        double r244576 = r244574 / r244575;
        double r244577 = r244552 ? r244565 : r244576;
        return r244577;
}

Error

Bits error versus x

Target

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

Derivation

  1. Split input into 2 regimes
  2. if x < -139.67380485985092 or 129.30183772681997 < 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.6

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

      \[\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)}\]

    if -139.67380485985092 < x < 129.30183772681997

    1. Initial program 0.0

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

      \[\leadsto \color{blue}{\frac{1 \cdot x - \left(x + 1\right) \cdot 2}{\left(x + 1\right) \cdot x}} + \frac{1}{x - 1}\]
    4. Applied frac-add0.0

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

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

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

Reproduce

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