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

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

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(2, \frac{1}{{x}^{7}}, \mathsf{fma}\left(2, \frac{1}{{x}^{5}}, \frac{\frac{2}{x \cdot x}}{x}\right)\right)\\

\end{array}
double f(double x) {
        double r132210 = 1.0;
        double r132211 = x;
        double r132212 = r132211 + r132210;
        double r132213 = r132210 / r132212;
        double r132214 = 2.0;
        double r132215 = r132214 / r132211;
        double r132216 = r132213 - r132215;
        double r132217 = r132211 - r132210;
        double r132218 = r132210 / r132217;
        double r132219 = r132216 + r132218;
        return r132219;
}

double f(double x) {
        double r132220 = x;
        double r132221 = -108.88679580976668;
        bool r132222 = r132220 <= r132221;
        double r132223 = 2.0;
        double r132224 = 1.0;
        double r132225 = 7.0;
        double r132226 = pow(r132220, r132225);
        double r132227 = r132224 / r132226;
        double r132228 = 5.0;
        double r132229 = pow(r132220, r132228);
        double r132230 = r132224 / r132229;
        double r132231 = 3.0;
        double r132232 = pow(r132220, r132231);
        double r132233 = r132223 / r132232;
        double r132234 = fma(r132223, r132230, r132233);
        double r132235 = fma(r132223, r132227, r132234);
        double r132236 = 129.8241176321693;
        bool r132237 = r132220 <= r132236;
        double r132238 = 1.0;
        double r132239 = r132220 + r132238;
        double r132240 = r132238 / r132239;
        double r132241 = r132223 / r132220;
        double r132242 = r132240 - r132241;
        double r132243 = r132220 - r132238;
        double r132244 = r132238 / r132243;
        double r132245 = r132242 + r132244;
        double r132246 = r132220 * r132220;
        double r132247 = r132223 / r132246;
        double r132248 = r132247 / r132220;
        double r132249 = fma(r132223, r132230, r132248);
        double r132250 = fma(r132223, r132227, r132249);
        double r132251 = r132237 ? r132245 : r132250;
        double r132252 = r132222 ? r132235 : r132251;
        return r132252;
}

Error

Bits error versus x

Target

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

Derivation

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

    1. Initial program 20.3

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

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

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

    if -108.88679580976668 < x < 129.8241176321693

    1. Initial program 0.0

      \[\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\]

    if 129.8241176321693 < x

    1. Initial program 19.1

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

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

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

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

Reproduce

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