Average Error: 9.7 → 0.5
Time: 8.8s
Precision: 64
\[\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\]
\[\begin{array}{l} \mathbf{if}\;\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1} \le -33511.8397027548854:\\ \;\;\;\;\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\\ \mathbf{elif}\;\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1} \le 1.65436 \cdot 10^{-24}:\\ \;\;\;\;\left(\frac{2}{{x}^{5}} + \frac{1}{x \cdot x} \cdot \frac{2}{x}\right) + \frac{2}{{x}^{7}}\\ \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}\;\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1} \le -33511.8397027548854:\\
\;\;\;\;\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\\

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

\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 r101712 = 1.0;
        double r101713 = x;
        double r101714 = r101713 + r101712;
        double r101715 = r101712 / r101714;
        double r101716 = 2.0;
        double r101717 = r101716 / r101713;
        double r101718 = r101715 - r101717;
        double r101719 = r101713 - r101712;
        double r101720 = r101712 / r101719;
        double r101721 = r101718 + r101720;
        return r101721;
}

double f(double x) {
        double r101722 = 1.0;
        double r101723 = x;
        double r101724 = r101723 + r101722;
        double r101725 = r101722 / r101724;
        double r101726 = 2.0;
        double r101727 = r101726 / r101723;
        double r101728 = r101725 - r101727;
        double r101729 = r101723 - r101722;
        double r101730 = r101722 / r101729;
        double r101731 = r101728 + r101730;
        double r101732 = -33511.839702754885;
        bool r101733 = r101731 <= r101732;
        double r101734 = 1.6543612251060553e-24;
        bool r101735 = r101731 <= r101734;
        double r101736 = 5.0;
        double r101737 = pow(r101723, r101736);
        double r101738 = r101726 / r101737;
        double r101739 = 1.0;
        double r101740 = r101723 * r101723;
        double r101741 = r101739 / r101740;
        double r101742 = r101741 * r101727;
        double r101743 = r101738 + r101742;
        double r101744 = 7.0;
        double r101745 = pow(r101723, r101744);
        double r101746 = r101726 / r101745;
        double r101747 = r101743 + r101746;
        double r101748 = r101722 * r101723;
        double r101749 = r101724 * r101726;
        double r101750 = r101748 - r101749;
        double r101751 = r101724 * r101723;
        double r101752 = r101751 * r101722;
        double r101753 = fma(r101750, r101729, r101752);
        double r101754 = r101751 * r101729;
        double r101755 = r101753 / r101754;
        double r101756 = r101735 ? r101747 : r101755;
        double r101757 = r101733 ? r101731 : r101756;
        return r101757;
}

Error

Bits error versus x

Target

Original9.7
Target0.3
Herbie0.5
\[\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))) < -33511.839702754885

    1. Initial program 0.0

      \[\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\]

    if -33511.839702754885 < (+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0))) < 1.6543612251060553e-24

    1. Initial program 19.4

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

      \[\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-add51.5

      \[\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. Simplified52.0

      \[\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)}\]
    6. Taylor expanded around inf 1.4

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

      \[\leadsto \color{blue}{\left(\frac{2}{{x}^{5}} + \frac{2}{{x}^{3}}\right) + \frac{2}{{x}^{7}}}\]
    8. Using strategy rm
    9. Applied add-cube-cbrt2.0

      \[\leadsto \left(\frac{2}{{x}^{5}} + \frac{2}{{\color{blue}{\left(\left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) \cdot \sqrt[3]{x}\right)}}^{3}}\right) + \frac{2}{{x}^{7}}\]
    10. Applied unpow-prod-down2.0

      \[\leadsto \left(\frac{2}{{x}^{5}} + \frac{2}{\color{blue}{{\left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right)}^{3} \cdot {\left(\sqrt[3]{x}\right)}^{3}}}\right) + \frac{2}{{x}^{7}}\]
    11. Applied *-un-lft-identity2.0

      \[\leadsto \left(\frac{2}{{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) + \frac{2}{{x}^{7}}\]
    12. Applied times-frac1.4

      \[\leadsto \left(\frac{2}{{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) + \frac{2}{{x}^{7}}\]
    13. Simplified1.1

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

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

    if 1.6543612251060553e-24 < (+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0)))

    1. Initial program 0.5

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

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

      \[\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 3 regimes into one program.
  4. Final simplification0.5

    \[\leadsto \begin{array}{l} \mathbf{if}\;\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1} \le -33511.8397027548854:\\ \;\;\;\;\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\\ \mathbf{elif}\;\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1} \le 1.65436 \cdot 10^{-24}:\\ \;\;\;\;\left(\frac{2}{{x}^{5}} + \frac{1}{x \cdot x} \cdot \frac{2}{x}\right) + \frac{2}{{x}^{7}}\\ \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 2020046 +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))))