Average Error: 9.8 → 0.4
Time: 1.1m
Precision: 64
\[\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\]
\[\begin{array}{l} \mathbf{if}\;x \le -127.7718829905971:\\ \;\;\;\;\frac{2}{{x}^{7}} + \left(\frac{2}{x \cdot \left(x \cdot x\right)} + \frac{2}{{x}^{5}}\right)\\ \mathbf{elif}\;x \le 131.99974585670387:\\ \;\;\;\;\frac{\mathsf{fma}\left(\left(x - 2 \cdot \left(1 + x\right)\right), \left(x + -1\right), \left(x \cdot \left(1 + x\right)\right)\right)}{\left(x \cdot \left(1 + x\right)\right) \cdot \left(x + -1\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{2}{{x}^{7}} + \left(\frac{2}{x \cdot \left(x \cdot x\right)} + \frac{2}{{x}^{5}}\right)\\ \end{array}\]
\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}
\begin{array}{l}
\mathbf{if}\;x \le -127.7718829905971:\\
\;\;\;\;\frac{2}{{x}^{7}} + \left(\frac{2}{x \cdot \left(x \cdot x\right)} + \frac{2}{{x}^{5}}\right)\\

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

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

\end{array}
double f(double x) {
        double r3350195 = 1.0;
        double r3350196 = x;
        double r3350197 = r3350196 + r3350195;
        double r3350198 = r3350195 / r3350197;
        double r3350199 = 2.0;
        double r3350200 = r3350199 / r3350196;
        double r3350201 = r3350198 - r3350200;
        double r3350202 = r3350196 - r3350195;
        double r3350203 = r3350195 / r3350202;
        double r3350204 = r3350201 + r3350203;
        return r3350204;
}

double f(double x) {
        double r3350205 = x;
        double r3350206 = -127.7718829905971;
        bool r3350207 = r3350205 <= r3350206;
        double r3350208 = 2.0;
        double r3350209 = 7.0;
        double r3350210 = pow(r3350205, r3350209);
        double r3350211 = r3350208 / r3350210;
        double r3350212 = r3350205 * r3350205;
        double r3350213 = r3350205 * r3350212;
        double r3350214 = r3350208 / r3350213;
        double r3350215 = 5.0;
        double r3350216 = pow(r3350205, r3350215);
        double r3350217 = r3350208 / r3350216;
        double r3350218 = r3350214 + r3350217;
        double r3350219 = r3350211 + r3350218;
        double r3350220 = 131.99974585670387;
        bool r3350221 = r3350205 <= r3350220;
        double r3350222 = 1.0;
        double r3350223 = r3350222 + r3350205;
        double r3350224 = r3350208 * r3350223;
        double r3350225 = r3350205 - r3350224;
        double r3350226 = -1.0;
        double r3350227 = r3350205 + r3350226;
        double r3350228 = r3350205 * r3350223;
        double r3350229 = fma(r3350225, r3350227, r3350228);
        double r3350230 = r3350228 * r3350227;
        double r3350231 = r3350229 / r3350230;
        double r3350232 = r3350221 ? r3350231 : r3350219;
        double r3350233 = r3350207 ? r3350219 : r3350232;
        return r3350233;
}

Error

Bits error versus x

Target

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

Derivation

  1. Split input into 2 regimes
  2. if x < -127.7718829905971 or 131.99974585670387 < x

    1. Initial program 19.8

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

      \[\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.7

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

    if -127.7718829905971 < x < 131.99974585670387

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

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

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

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

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

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

Reproduce

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