Average Error: 9.6 → 0.5
Time: 21.3s
Precision: 64
\[\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\]
\[\begin{array}{l} \mathbf{if}\;x \le -0.9941877870754349810766825612518005073071:\\ \;\;\;\;\left(\frac{\sqrt{\frac{\frac{2}{x}}{x}}}{x} \cdot \sqrt{\frac{2}{x \cdot x}} + \frac{2}{{x}^{5}}\right) - \frac{2.220446049250313080847263336181640625 \cdot 10^{-16}}{{x}^{6}}\\ \mathbf{elif}\;x \le 1.023269548601458467373959138058125972748:\\ \;\;\;\;-2 \cdot \left({x}^{3} + \left(\frac{1}{x} + x\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{2}{{x}^{3}} + \frac{2}{{x}^{5}}\right) - \frac{2.220446049250313080847263336181640625 \cdot 10^{-16}}{{x}^{6}}\\ \end{array}\]
\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}
\begin{array}{l}
\mathbf{if}\;x \le -0.9941877870754349810766825612518005073071:\\
\;\;\;\;\left(\frac{\sqrt{\frac{\frac{2}{x}}{x}}}{x} \cdot \sqrt{\frac{2}{x \cdot x}} + \frac{2}{{x}^{5}}\right) - \frac{2.220446049250313080847263336181640625 \cdot 10^{-16}}{{x}^{6}}\\

\mathbf{elif}\;x \le 1.023269548601458467373959138058125972748:\\
\;\;\;\;-2 \cdot \left({x}^{3} + \left(\frac{1}{x} + x\right)\right)\\

\mathbf{else}:\\
\;\;\;\;\left(\frac{2}{{x}^{3}} + \frac{2}{{x}^{5}}\right) - \frac{2.220446049250313080847263336181640625 \cdot 10^{-16}}{{x}^{6}}\\

\end{array}
double f(double x) {
        double r107611 = 1.0;
        double r107612 = x;
        double r107613 = r107612 + r107611;
        double r107614 = r107611 / r107613;
        double r107615 = 2.0;
        double r107616 = r107615 / r107612;
        double r107617 = r107614 - r107616;
        double r107618 = r107612 - r107611;
        double r107619 = r107611 / r107618;
        double r107620 = r107617 + r107619;
        return r107620;
}

double f(double x) {
        double r107621 = x;
        double r107622 = -0.994187787075435;
        bool r107623 = r107621 <= r107622;
        double r107624 = 2.0;
        double r107625 = r107624 / r107621;
        double r107626 = r107625 / r107621;
        double r107627 = sqrt(r107626);
        double r107628 = r107627 / r107621;
        double r107629 = r107621 * r107621;
        double r107630 = r107624 / r107629;
        double r107631 = sqrt(r107630);
        double r107632 = r107628 * r107631;
        double r107633 = 5.0;
        double r107634 = pow(r107621, r107633);
        double r107635 = r107624 / r107634;
        double r107636 = r107632 + r107635;
        double r107637 = 2.220446049250313e-16;
        double r107638 = 6.0;
        double r107639 = pow(r107621, r107638);
        double r107640 = r107637 / r107639;
        double r107641 = r107636 - r107640;
        double r107642 = 1.0232695486014585;
        bool r107643 = r107621 <= r107642;
        double r107644 = 3.0;
        double r107645 = pow(r107621, r107644);
        double r107646 = 1.0;
        double r107647 = r107646 / r107621;
        double r107648 = r107647 + r107621;
        double r107649 = r107645 + r107648;
        double r107650 = r107624 * r107649;
        double r107651 = -r107650;
        double r107652 = r107624 / r107645;
        double r107653 = r107652 + r107635;
        double r107654 = r107653 - r107640;
        double r107655 = r107643 ? r107651 : r107654;
        double r107656 = r107623 ? r107641 : r107655;
        return r107656;
}

Error

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

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

Derivation

  1. Split input into 3 regimes
  2. if x < -0.994187787075435

    1. Initial program 19.3

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

      \[\leadsto \color{blue}{\frac{1}{x - 1} - \left(\frac{2}{x} - \frac{1}{x + 1}\right)}\]
    3. Using strategy rm
    4. Applied log1p-expm1-u19.3

      \[\leadsto \frac{1}{x - 1} - \left(\frac{2}{x} - \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(\frac{1}{x + 1}\right)\right)}\right)\]
    5. Taylor expanded around inf 0.8

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

      \[\leadsto \color{blue}{\left(\frac{2}{{x}^{3}} + \frac{2}{{x}^{5}}\right) - \frac{2.220446049250313080847263336181640625 \cdot 10^{-16}}{{x}^{6}}}\]
    7. Using strategy rm
    8. Applied cube-mult0.9

      \[\leadsto \left(\frac{2}{\color{blue}{x \cdot \left(x \cdot x\right)}} + \frac{2}{{x}^{5}}\right) - \frac{2.220446049250313080847263336181640625 \cdot 10^{-16}}{{x}^{6}}\]
    9. Applied *-un-lft-identity0.9

      \[\leadsto \left(\frac{\color{blue}{1 \cdot 2}}{x \cdot \left(x \cdot x\right)} + \frac{2}{{x}^{5}}\right) - \frac{2.220446049250313080847263336181640625 \cdot 10^{-16}}{{x}^{6}}\]
    10. Applied times-frac0.5

      \[\leadsto \left(\color{blue}{\frac{1}{x} \cdot \frac{2}{x \cdot x}} + \frac{2}{{x}^{5}}\right) - \frac{2.220446049250313080847263336181640625 \cdot 10^{-16}}{{x}^{6}}\]
    11. Using strategy rm
    12. Applied add-sqr-sqrt0.6

      \[\leadsto \left(\frac{1}{x} \cdot \color{blue}{\left(\sqrt{\frac{2}{x \cdot x}} \cdot \sqrt{\frac{2}{x \cdot x}}\right)} + \frac{2}{{x}^{5}}\right) - \frac{2.220446049250313080847263336181640625 \cdot 10^{-16}}{{x}^{6}}\]
    13. Applied associate-*r*0.6

      \[\leadsto \left(\color{blue}{\left(\frac{1}{x} \cdot \sqrt{\frac{2}{x \cdot x}}\right) \cdot \sqrt{\frac{2}{x \cdot x}}} + \frac{2}{{x}^{5}}\right) - \frac{2.220446049250313080847263336181640625 \cdot 10^{-16}}{{x}^{6}}\]
    14. Simplified0.6

      \[\leadsto \left(\color{blue}{\frac{\sqrt{\frac{\frac{2}{x}}{x}}}{x}} \cdot \sqrt{\frac{2}{x \cdot x}} + \frac{2}{{x}^{5}}\right) - \frac{2.220446049250313080847263336181640625 \cdot 10^{-16}}{{x}^{6}}\]

    if -0.994187787075435 < x < 1.0232695486014585

    1. Initial program 0.0

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

      \[\leadsto \color{blue}{\frac{1}{x - 1} - \left(\frac{2}{x} - \frac{1}{x + 1}\right)}\]
    3. Using strategy rm
    4. Applied log1p-expm1-u0.0

      \[\leadsto \frac{1}{x - 1} - \left(\frac{2}{x} - \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(\frac{1}{x + 1}\right)\right)}\right)\]
    5. Taylor expanded around 0 0.3

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

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

    if 1.0232695486014585 < x

    1. Initial program 19.0

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

      \[\leadsto \color{blue}{\frac{1}{x - 1} - \left(\frac{2}{x} - \frac{1}{x + 1}\right)}\]
    3. Using strategy rm
    4. Applied log1p-expm1-u19.0

      \[\leadsto \frac{1}{x - 1} - \left(\frac{2}{x} - \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(\frac{1}{x + 1}\right)\right)}\right)\]
    5. Taylor expanded around inf 0.6

      \[\leadsto \color{blue}{\left(2 \cdot \frac{1}{{x}^{5}} + 2 \cdot \frac{1}{{x}^{3}}\right) - 2.220446049250313080847263336181640625 \cdot 10^{-16} \cdot \frac{1}{{x}^{6}}}\]
    6. Simplified0.6

      \[\leadsto \color{blue}{\left(\frac{2}{{x}^{3}} + \frac{2}{{x}^{5}}\right) - \frac{2.220446049250313080847263336181640625 \cdot 10^{-16}}{{x}^{6}}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification0.5

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -0.9941877870754349810766825612518005073071:\\ \;\;\;\;\left(\frac{\sqrt{\frac{\frac{2}{x}}{x}}}{x} \cdot \sqrt{\frac{2}{x \cdot x}} + \frac{2}{{x}^{5}}\right) - \frac{2.220446049250313080847263336181640625 \cdot 10^{-16}}{{x}^{6}}\\ \mathbf{elif}\;x \le 1.023269548601458467373959138058125972748:\\ \;\;\;\;-2 \cdot \left({x}^{3} + \left(\frac{1}{x} + x\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{2}{{x}^{3}} + \frac{2}{{x}^{5}}\right) - \frac{2.220446049250313080847263336181640625 \cdot 10^{-16}}{{x}^{6}}\\ \end{array}\]

Reproduce

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