Average Error: 9.8 → 0.0
Time: 8.0s
Precision: 64
\[\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\]
\[\begin{array}{l} \mathbf{if}\;x \le -674651.752665766398 \lor \neg \left(x \le 480.38612570457826\right):\\ \;\;\;\;\mathsf{fma}\left(2, \frac{1}{{x}^{7}}, \mathsf{fma}\left(2, \frac{1}{{x}^{5}}, 2 \cdot {x}^{\left(-3\right)}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{\mathsf{fma}\left(1, \left(x - 1\right) \cdot x, \left(x + 1\right) \cdot \left(1 \cdot x - \left(x - 1\right) \cdot 2\right)\right)}{\left(x + 1\right) \cdot \left(\left(x - 1\right) \cdot x\right)}\\ \end{array}\]
\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}
\begin{array}{l}
\mathbf{if}\;x \le -674651.752665766398 \lor \neg \left(x \le 480.38612570457826\right):\\
\;\;\;\;\mathsf{fma}\left(2, \frac{1}{{x}^{7}}, \mathsf{fma}\left(2, \frac{1}{{x}^{5}}, 2 \cdot {x}^{\left(-3\right)}\right)\right)\\

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

\end{array}
double f(double x) {
        double r183275 = 1.0;
        double r183276 = x;
        double r183277 = r183276 + r183275;
        double r183278 = r183275 / r183277;
        double r183279 = 2.0;
        double r183280 = r183279 / r183276;
        double r183281 = r183278 - r183280;
        double r183282 = r183276 - r183275;
        double r183283 = r183275 / r183282;
        double r183284 = r183281 + r183283;
        return r183284;
}

double f(double x) {
        double r183285 = x;
        double r183286 = -674651.7526657664;
        bool r183287 = r183285 <= r183286;
        double r183288 = 480.38612570457826;
        bool r183289 = r183285 <= r183288;
        double r183290 = !r183289;
        bool r183291 = r183287 || r183290;
        double r183292 = 2.0;
        double r183293 = 1.0;
        double r183294 = 7.0;
        double r183295 = pow(r183285, r183294);
        double r183296 = r183293 / r183295;
        double r183297 = 5.0;
        double r183298 = pow(r183285, r183297);
        double r183299 = r183293 / r183298;
        double r183300 = 3.0;
        double r183301 = -r183300;
        double r183302 = pow(r183285, r183301);
        double r183303 = r183292 * r183302;
        double r183304 = fma(r183292, r183299, r183303);
        double r183305 = fma(r183292, r183296, r183304);
        double r183306 = 1.0;
        double r183307 = r183285 - r183306;
        double r183308 = r183307 * r183285;
        double r183309 = r183285 + r183306;
        double r183310 = r183306 * r183285;
        double r183311 = r183307 * r183292;
        double r183312 = r183310 - r183311;
        double r183313 = r183309 * r183312;
        double r183314 = fma(r183306, r183308, r183313);
        double r183315 = r183309 * r183308;
        double r183316 = r183314 / r183315;
        double r183317 = r183291 ? r183305 : r183316;
        return r183317;
}

Error

Bits error versus x

Target

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

Derivation

  1. Split input into 2 regimes
  2. if x < -674651.7526657664 or 480.38612570457826 < x

    1. Initial program 19.6

      \[\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\]
    2. Using strategy rm
    3. Applied sub-neg19.6

      \[\leadsto \color{blue}{\left(\frac{1}{x + 1} + \left(-\frac{2}{x}\right)\right)} + \frac{1}{x - 1}\]
    4. Applied associate-+l+19.6

      \[\leadsto \color{blue}{\frac{1}{x + 1} + \left(\left(-\frac{2}{x}\right) + \frac{1}{x - 1}\right)}\]
    5. Simplified19.6

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

      \[\leadsto \color{blue}{\mathsf{fma}\left(2, \frac{1}{{x}^{7}}, \mathsf{fma}\left(2, \frac{1}{{x}^{5}}, 2 \cdot \frac{1}{{x}^{3}}\right)\right)}\]
    8. Using strategy rm
    9. Applied pow-flip0.0

      \[\leadsto \mathsf{fma}\left(2, \frac{1}{{x}^{7}}, \mathsf{fma}\left(2, \frac{1}{{x}^{5}}, 2 \cdot \color{blue}{{x}^{\left(-3\right)}}\right)\right)\]

    if -674651.7526657664 < x < 480.38612570457826

    1. Initial program 0.2

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

      \[\leadsto \color{blue}{\left(\frac{1}{x + 1} + \left(-\frac{2}{x}\right)\right)} + \frac{1}{x - 1}\]
    4. Applied associate-+l+0.2

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

      \[\leadsto \frac{1}{x + 1} + \color{blue}{\left(\frac{1}{x - 1} - \frac{2}{x}\right)}\]
    6. Using strategy rm
    7. Applied frac-sub0.2

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

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

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

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

Reproduce

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