Average Error: 9.7 → 0.5
Time: 10.6s
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}:\\ \;\;\;\;\frac{2}{{x}^{7}} + \left(\frac{2}{{x}^{5}} + \frac{1}{x \cdot x} \cdot \frac{2}{x}\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}\;\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}:\\
\;\;\;\;\frac{2}{{x}^{7}} + \left(\frac{2}{{x}^{5}} + \frac{1}{x \cdot x} \cdot \frac{2}{x}\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 r71868 = 1.0;
        double r71869 = x;
        double r71870 = r71869 + r71868;
        double r71871 = r71868 / r71870;
        double r71872 = 2.0;
        double r71873 = r71872 / r71869;
        double r71874 = r71871 - r71873;
        double r71875 = r71869 - r71868;
        double r71876 = r71868 / r71875;
        double r71877 = r71874 + r71876;
        return r71877;
}

double f(double x) {
        double r71878 = 1.0;
        double r71879 = x;
        double r71880 = r71879 + r71878;
        double r71881 = r71878 / r71880;
        double r71882 = 2.0;
        double r71883 = r71882 / r71879;
        double r71884 = r71881 - r71883;
        double r71885 = r71879 - r71878;
        double r71886 = r71878 / r71885;
        double r71887 = r71884 + r71886;
        double r71888 = -33511.839702754885;
        bool r71889 = r71887 <= r71888;
        double r71890 = 1.6543612251060553e-24;
        bool r71891 = r71887 <= r71890;
        double r71892 = 7.0;
        double r71893 = pow(r71879, r71892);
        double r71894 = r71882 / r71893;
        double r71895 = 5.0;
        double r71896 = pow(r71879, r71895);
        double r71897 = r71882 / r71896;
        double r71898 = 1.0;
        double r71899 = r71879 * r71879;
        double r71900 = r71898 / r71899;
        double r71901 = r71900 * r71883;
        double r71902 = r71897 + r71901;
        double r71903 = r71894 + r71902;
        double r71904 = r71878 * r71879;
        double r71905 = r71880 * r71882;
        double r71906 = r71904 - r71905;
        double r71907 = r71880 * r71879;
        double r71908 = r71907 * r71878;
        double r71909 = fma(r71906, r71885, r71908);
        double r71910 = r71907 * r71885;
        double r71911 = r71909 / r71910;
        double r71912 = r71891 ? r71903 : r71911;
        double r71913 = r71889 ? r71887 : r71912;
        return r71913;
}

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. 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)}\]
    3. Simplified1.4

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

      \[\leadsto \frac{2}{{x}^{7}} + \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)\]
    6. Applied unpow-prod-down2.0

      \[\leadsto \frac{2}{{x}^{7}} + \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)\]
    7. Applied *-un-lft-identity2.0

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

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

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

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

    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}:\\ \;\;\;\;\frac{2}{{x}^{7}} + \left(\frac{2}{{x}^{5}} + \frac{1}{x \cdot x} \cdot \frac{2}{x}\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 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))))