Average Error: 10.2 → 0.1
Time: 19.4s
Precision: 64
\[\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\]
\[\begin{array}{l} \mathbf{if}\;x \le -101.7757910098267331022725556977093219757 \lor \neg \left(x \le 98.00054950125780806047259829938411712646\right):\\ \;\;\;\;\frac{2}{{x}^{7}} + \left(\frac{2}{{x}^{5}} + \frac{\frac{\frac{2}{x}}{x}}{x}\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\sqrt[3]{\frac{1}{x + 1}} \cdot \sqrt[3]{\frac{1}{x + 1}}, \sqrt[3]{\frac{1}{x + 1}}, 2 \cdot \frac{-1}{x}\right) + \frac{1}{x - 1}\\ \end{array}\]
\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}
\begin{array}{l}
\mathbf{if}\;x \le -101.7757910098267331022725556977093219757 \lor \neg \left(x \le 98.00054950125780806047259829938411712646\right):\\
\;\;\;\;\frac{2}{{x}^{7}} + \left(\frac{2}{{x}^{5}} + \frac{\frac{\frac{2}{x}}{x}}{x}\right)\\

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

\end{array}
double f(double x) {
        double r123083 = 1.0;
        double r123084 = x;
        double r123085 = r123084 + r123083;
        double r123086 = r123083 / r123085;
        double r123087 = 2.0;
        double r123088 = r123087 / r123084;
        double r123089 = r123086 - r123088;
        double r123090 = r123084 - r123083;
        double r123091 = r123083 / r123090;
        double r123092 = r123089 + r123091;
        return r123092;
}

double f(double x) {
        double r123093 = x;
        double r123094 = -101.77579100982673;
        bool r123095 = r123093 <= r123094;
        double r123096 = 98.00054950125781;
        bool r123097 = r123093 <= r123096;
        double r123098 = !r123097;
        bool r123099 = r123095 || r123098;
        double r123100 = 2.0;
        double r123101 = 7.0;
        double r123102 = pow(r123093, r123101);
        double r123103 = r123100 / r123102;
        double r123104 = 5.0;
        double r123105 = pow(r123093, r123104);
        double r123106 = r123100 / r123105;
        double r123107 = r123100 / r123093;
        double r123108 = r123107 / r123093;
        double r123109 = r123108 / r123093;
        double r123110 = r123106 + r123109;
        double r123111 = r123103 + r123110;
        double r123112 = 1.0;
        double r123113 = r123093 + r123112;
        double r123114 = r123112 / r123113;
        double r123115 = cbrt(r123114);
        double r123116 = r123115 * r123115;
        double r123117 = -1.0;
        double r123118 = r123117 / r123093;
        double r123119 = r123100 * r123118;
        double r123120 = fma(r123116, r123115, r123119);
        double r123121 = r123093 - r123112;
        double r123122 = r123112 / r123121;
        double r123123 = r123120 + r123122;
        double r123124 = r123099 ? r123111 : r123123;
        return r123124;
}

Error

Bits error versus x

Target

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

Derivation

  1. Split input into 2 regimes
  2. if x < -101.77579100982673 or 98.00054950125781 < x

    1. Initial program 20.2

      \[\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\]
    2. 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)}\]
    3. Simplified0.5

      \[\leadsto \color{blue}{\frac{2}{{x}^{7}} + \left(\frac{2}{{x}^{5}} + \frac{2}{{x}^{3}}\right)}\]
    4. Using strategy rm
    5. Applied unpow30.6

      \[\leadsto \frac{2}{{x}^{7}} + \left(\frac{2}{{x}^{5}} + \frac{2}{\color{blue}{\left(x \cdot x\right) \cdot x}}\right)\]
    6. Applied associate-/r*0.1

      \[\leadsto \frac{2}{{x}^{7}} + \left(\frac{2}{{x}^{5}} + \color{blue}{\frac{\frac{2}{x \cdot x}}{x}}\right)\]
    7. Using strategy rm
    8. Applied associate-/r*0.1

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

    if -101.77579100982673 < x < 98.00054950125781

    1. Initial program 0.0

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

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

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

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

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

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

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

Reproduce

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