Average Error: 10.3 → 0.1
Time: 2.9m
Precision: 64
\[\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\]
\[\begin{array}{l} \mathbf{if}\;x \le -0.9912853724188615:\\ \;\;\;\;\frac{2}{{x}^{7}} + \left(\frac{2}{{x}^{5}} + \frac{\frac{2}{x}}{x \cdot x}\right)\\ \mathbf{elif}\;x \le 96.01799138170381:\\ \;\;\;\;\frac{1}{x - 1} + \left(\frac{1}{\sqrt{1 + x}} \cdot \frac{1}{\sqrt{1 + x}} - \frac{2}{x}\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{2}{{x}^{7}} + \left(\frac{2}{{x}^{5}} + \frac{\frac{2}{x}}{x \cdot x}\right)\\ \end{array}\]
double f(double x) {
        double r13002235 = 1.0;
        double r13002236 = x;
        double r13002237 = r13002236 + r13002235;
        double r13002238 = r13002235 / r13002237;
        double r13002239 = 2.0;
        double r13002240 = r13002239 / r13002236;
        double r13002241 = r13002238 - r13002240;
        double r13002242 = r13002236 - r13002235;
        double r13002243 = r13002235 / r13002242;
        double r13002244 = r13002241 + r13002243;
        return r13002244;
}

double f(double x) {
        double r13002245 = x;
        double r13002246 = -0.9912853724188615;
        bool r13002247 = r13002245 <= r13002246;
        double r13002248 = 2.0;
        double r13002249 = 7.0;
        double r13002250 = pow(r13002245, r13002249);
        double r13002251 = r13002248 / r13002250;
        double r13002252 = 5.0;
        double r13002253 = pow(r13002245, r13002252);
        double r13002254 = r13002248 / r13002253;
        double r13002255 = r13002248 / r13002245;
        double r13002256 = r13002245 * r13002245;
        double r13002257 = r13002255 / r13002256;
        double r13002258 = r13002254 + r13002257;
        double r13002259 = r13002251 + r13002258;
        double r13002260 = 96.01799138170381;
        bool r13002261 = r13002245 <= r13002260;
        double r13002262 = 1.0;
        double r13002263 = r13002245 - r13002262;
        double r13002264 = r13002262 / r13002263;
        double r13002265 = r13002262 + r13002245;
        double r13002266 = sqrt(r13002265);
        double r13002267 = r13002262 / r13002266;
        double r13002268 = r13002267 * r13002267;
        double r13002269 = r13002268 - r13002255;
        double r13002270 = r13002264 + r13002269;
        double r13002271 = r13002261 ? r13002270 : r13002259;
        double r13002272 = r13002247 ? r13002259 : r13002271;
        return r13002272;
}

\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}
\begin{array}{l}
\mathbf{if}\;x \le -0.9912853724188615:\\
\;\;\;\;\frac{2}{{x}^{7}} + \left(\frac{2}{{x}^{5}} + \frac{\frac{2}{x}}{x \cdot x}\right)\\

\mathbf{elif}\;x \le 96.01799138170381:\\
\;\;\;\;\frac{1}{x - 1} + \left(\frac{1}{\sqrt{1 + x}} \cdot \frac{1}{\sqrt{1 + x}} - \frac{2}{x}\right)\\

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

\end{array}

Error

Bits error versus x

Target

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

Derivation

  1. Split input into 2 regimes
  2. if x < -0.9912853724188615 or 96.01799138170381 < x

    1. Initial program 20.6

      \[\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\]
    2. Taylor expanded around -inf 0.6

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

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

    if -0.9912853724188615 < x < 96.01799138170381

    1. Initial program 0.0

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

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -0.9912853724188615:\\ \;\;\;\;\frac{2}{{x}^{7}} + \left(\frac{2}{{x}^{5}} + \frac{\frac{2}{x}}{x \cdot x}\right)\\ \mathbf{elif}\;x \le 96.01799138170381:\\ \;\;\;\;\frac{1}{x - 1} + \left(\frac{1}{\sqrt{1 + x}} \cdot \frac{1}{\sqrt{1 + x}} - \frac{2}{x}\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{2}{{x}^{7}} + \left(\frac{2}{{x}^{5}} + \frac{\frac{2}{x}}{x \cdot x}\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019101 +o rules:numerics
(FPCore (x)
  :name "3frac (problem 3.3.3)"

  :herbie-target
  (/ 2 (* x (- (* x x) 1)))

  (+ (- (/ 1 (+ x 1)) (/ 2 x)) (/ 1 (- x 1))))