Average Error: 9.5 → 0.2
Time: 19.0s
Precision: 64
\[\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\]
\[\begin{array}{l} \mathbf{if}\;x \le -110.3639962943735213229956571012735366821:\\ \;\;\;\;\left(\frac{2}{{x}^{5}} + \frac{2}{{x}^{7}}\right) + \frac{2}{{x}^{3}}\\ \mathbf{elif}\;x \le 108.2804405523375663733531837351620197296:\\ \;\;\;\;\mathsf{fma}\left(1, \frac{1}{x + 1}, -\frac{2}{x}\right) + \frac{1}{x - 1}\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{2}{{x}^{5}} + \frac{2}{{x}^{7}}\right) + \frac{\frac{2}{x \cdot x}}{x}\\ \end{array}\]
\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}
\begin{array}{l}
\mathbf{if}\;x \le -110.3639962943735213229956571012735366821:\\
\;\;\;\;\left(\frac{2}{{x}^{5}} + \frac{2}{{x}^{7}}\right) + \frac{2}{{x}^{3}}\\

\mathbf{elif}\;x \le 108.2804405523375663733531837351620197296:\\
\;\;\;\;\mathsf{fma}\left(1, \frac{1}{x + 1}, -\frac{2}{x}\right) + \frac{1}{x - 1}\\

\mathbf{else}:\\
\;\;\;\;\left(\frac{2}{{x}^{5}} + \frac{2}{{x}^{7}}\right) + \frac{\frac{2}{x \cdot x}}{x}\\

\end{array}
double f(double x) {
        double r74271 = 1.0;
        double r74272 = x;
        double r74273 = r74272 + r74271;
        double r74274 = r74271 / r74273;
        double r74275 = 2.0;
        double r74276 = r74275 / r74272;
        double r74277 = r74274 - r74276;
        double r74278 = r74272 - r74271;
        double r74279 = r74271 / r74278;
        double r74280 = r74277 + r74279;
        return r74280;
}

double f(double x) {
        double r74281 = x;
        double r74282 = -110.36399629437352;
        bool r74283 = r74281 <= r74282;
        double r74284 = 2.0;
        double r74285 = 5.0;
        double r74286 = pow(r74281, r74285);
        double r74287 = r74284 / r74286;
        double r74288 = 7.0;
        double r74289 = pow(r74281, r74288);
        double r74290 = r74284 / r74289;
        double r74291 = r74287 + r74290;
        double r74292 = 3.0;
        double r74293 = pow(r74281, r74292);
        double r74294 = r74284 / r74293;
        double r74295 = r74291 + r74294;
        double r74296 = 108.28044055233757;
        bool r74297 = r74281 <= r74296;
        double r74298 = 1.0;
        double r74299 = 1.0;
        double r74300 = r74281 + r74298;
        double r74301 = r74299 / r74300;
        double r74302 = r74284 / r74281;
        double r74303 = -r74302;
        double r74304 = fma(r74298, r74301, r74303);
        double r74305 = r74281 - r74298;
        double r74306 = r74298 / r74305;
        double r74307 = r74304 + r74306;
        double r74308 = r74281 * r74281;
        double r74309 = r74284 / r74308;
        double r74310 = r74309 / r74281;
        double r74311 = r74291 + r74310;
        double r74312 = r74297 ? r74307 : r74311;
        double r74313 = r74283 ? r74295 : r74312;
        return r74313;
}

Error

Bits error versus x

Target

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

Derivation

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

    1. Initial program 19.0

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

    if -110.36399629437352 < x < 108.28044055233757

    1. Initial program 0.0

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

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

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

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

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

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

    if 108.28044055233757 < x

    1. Initial program 19.3

      \[\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}{\left(\frac{2}{{x}^{5}} + \frac{2}{{x}^{7}}\right) + \frac{2}{{x}^{3}}}\]
    4. Using strategy rm
    5. Applied unpow30.5

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

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

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

Reproduce

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