Average Error: 9.5 → 0.3
Time: 8.8s
Precision: 64
\[\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\]
\[\begin{array}{l} \mathbf{if}\;x \le -115.116316502083535 \lor \neg \left(x \le 120.64077220743235\right):\\ \;\;\;\;\left(\frac{2}{{x}^{7}} + \frac{2}{{x}^{3}}\right) + \frac{2}{{x}^{5}}\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{1}{x + 1}, \frac{1 \cdot x - \left(x + 1\right) \cdot 2}{x}, \frac{1}{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 -115.116316502083535 \lor \neg \left(x \le 120.64077220743235\right):\\
\;\;\;\;\left(\frac{2}{{x}^{7}} + \frac{2}{{x}^{3}}\right) + \frac{2}{{x}^{5}}\\

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

\end{array}
double f(double x) {
        double r146735 = 1.0;
        double r146736 = x;
        double r146737 = r146736 + r146735;
        double r146738 = r146735 / r146737;
        double r146739 = 2.0;
        double r146740 = r146739 / r146736;
        double r146741 = r146738 - r146740;
        double r146742 = r146736 - r146735;
        double r146743 = r146735 / r146742;
        double r146744 = r146741 + r146743;
        return r146744;
}

double f(double x) {
        double r146745 = x;
        double r146746 = -115.11631650208354;
        bool r146747 = r146745 <= r146746;
        double r146748 = 120.64077220743235;
        bool r146749 = r146745 <= r146748;
        double r146750 = !r146749;
        bool r146751 = r146747 || r146750;
        double r146752 = 2.0;
        double r146753 = 7.0;
        double r146754 = pow(r146745, r146753);
        double r146755 = r146752 / r146754;
        double r146756 = 3.0;
        double r146757 = pow(r146745, r146756);
        double r146758 = r146752 / r146757;
        double r146759 = r146755 + r146758;
        double r146760 = 5.0;
        double r146761 = pow(r146745, r146760);
        double r146762 = r146752 / r146761;
        double r146763 = r146759 + r146762;
        double r146764 = 1.0;
        double r146765 = 1.0;
        double r146766 = r146745 + r146765;
        double r146767 = r146764 / r146766;
        double r146768 = r146765 * r146745;
        double r146769 = r146766 * r146752;
        double r146770 = r146768 - r146769;
        double r146771 = r146770 / r146745;
        double r146772 = r146745 - r146765;
        double r146773 = r146765 / r146772;
        double r146774 = fma(r146767, r146771, r146773);
        double r146775 = r146751 ? r146763 : r146774;
        return r146775;
}

Error

Bits error versus x

Target

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

Derivation

  1. Split input into 2 regimes
  2. if x < -115.11631650208354 or 120.64077220743235 < x

    1. Initial program 19.1

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

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

      \[\leadsto \left(\frac{\color{blue}{\left(\sqrt[3]{1} \cdot \sqrt[3]{1}\right) \cdot \sqrt[3]{1}}}{1 \cdot \left(x + 1\right)} - \frac{2}{x}\right) + \frac{1}{x - 1}\]
    5. Applied times-frac19.1

      \[\leadsto \left(\color{blue}{\frac{\sqrt[3]{1} \cdot \sqrt[3]{1}}{1} \cdot \frac{\sqrt[3]{1}}{x + 1}} - \frac{2}{x}\right) + \frac{1}{x - 1}\]
    6. Applied fma-neg19.1

      \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{\sqrt[3]{1} \cdot \sqrt[3]{1}}{1}, \frac{\sqrt[3]{1}}{x + 1}, -\frac{2}{x}\right)} + \frac{1}{x - 1}\]
    7. Simplified19.1

      \[\leadsto \mathsf{fma}\left(\frac{\sqrt[3]{1} \cdot \sqrt[3]{1}}{1}, \frac{\sqrt[3]{1}}{x + 1}, \color{blue}{\frac{-2}{x}}\right) + \frac{1}{x - 1}\]
    8. Taylor expanded around inf 0.5

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

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

    if -115.11631650208354 < x < 120.64077220743235

    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.0

      \[\leadsto \color{blue}{\frac{1 \cdot x - \left(x + 1\right) \cdot 2}{\left(x + 1\right) \cdot x}} + \frac{1}{x - 1}\]
    4. Using strategy rm
    5. Applied *-un-lft-identity0.0

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

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

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

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

Reproduce

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