Average Error: 9.5 → 0.4
Time: 5.6s
Precision: 64
\[\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\]
\[\begin{array}{l} \mathbf{if}\;\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1} \le -9.3981606387488981:\\ \;\;\;\;\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\\ \mathbf{elif}\;\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1} \le 4.94066 \cdot 10^{-324}:\\ \;\;\;\;\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{\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)}\\ \end{array}\]
\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}
\begin{array}{l}
\mathbf{if}\;\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1} \le -9.3981606387488981:\\
\;\;\;\;\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\\

\mathbf{elif}\;\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1} \le 4.94066 \cdot 10^{-324}:\\
\;\;\;\;\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{\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)}\\

\end{array}
double f(double x) {
        double r118901 = 1.0;
        double r118902 = x;
        double r118903 = r118902 + r118901;
        double r118904 = r118901 / r118903;
        double r118905 = 2.0;
        double r118906 = r118905 / r118902;
        double r118907 = r118904 - r118906;
        double r118908 = r118902 - r118901;
        double r118909 = r118901 / r118908;
        double r118910 = r118907 + r118909;
        return r118910;
}

double f(double x) {
        double r118911 = 1.0;
        double r118912 = x;
        double r118913 = r118912 + r118911;
        double r118914 = r118911 / r118913;
        double r118915 = 2.0;
        double r118916 = r118915 / r118912;
        double r118917 = r118914 - r118916;
        double r118918 = r118912 - r118911;
        double r118919 = r118911 / r118918;
        double r118920 = r118917 + r118919;
        double r118921 = -9.398160638748898;
        bool r118922 = r118920 <= r118921;
        double r118923 = 4.9406564584125e-324;
        bool r118924 = r118920 <= r118923;
        double r118925 = 1.0;
        double r118926 = 7.0;
        double r118927 = pow(r118912, r118926);
        double r118928 = r118925 / r118927;
        double r118929 = 5.0;
        double r118930 = pow(r118912, r118929);
        double r118931 = r118925 / r118930;
        double r118932 = 3.0;
        double r118933 = -r118932;
        double r118934 = pow(r118912, r118933);
        double r118935 = r118915 * r118934;
        double r118936 = fma(r118915, r118931, r118935);
        double r118937 = fma(r118915, r118928, r118936);
        double r118938 = r118911 * r118912;
        double r118939 = r118913 * r118915;
        double r118940 = r118938 - r118939;
        double r118941 = r118940 * r118918;
        double r118942 = r118913 * r118912;
        double r118943 = r118942 * r118911;
        double r118944 = r118941 + r118943;
        double r118945 = r118942 * r118918;
        double r118946 = r118944 / r118945;
        double r118947 = r118924 ? r118937 : r118946;
        double r118948 = r118922 ? r118920 : r118947;
        return r118948;
}

Error

Bits error versus x

Target

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

Derivation

  1. Split input into 3 regimes
  2. if (+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0))) < -9.398160638748898

    1. Initial program 0.0

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

    if -9.398160638748898 < (+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0))) < 4.9406564584125e-324

    1. Initial program 18.7

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

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

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

      \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(1 \cdot x - \left(x + 1\right) \cdot 2, x - 1, \left(\left(x + 1\right) \cdot x\right) \cdot 1\right)}}{\left(\left(x + 1\right) \cdot x\right) \cdot \left(x - 1\right)}\]
    6. Taylor expanded around inf 0.8

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

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

      \[\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 4.9406564584125e-324 < (+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0)))

    1. Initial program 1.5

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

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

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

      \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(1 \cdot x - \left(x + 1\right) \cdot 2, x - 1, \left(\left(x + 1\right) \cdot x\right) \cdot 1\right)}}{\left(\left(x + 1\right) \cdot x\right) \cdot \left(x - 1\right)}\]
    6. Using strategy rm
    7. Applied fma-udef0.9

      \[\leadsto \frac{\color{blue}{\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)}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification0.4

    \[\leadsto \begin{array}{l} \mathbf{if}\;\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1} \le -9.3981606387488981:\\ \;\;\;\;\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\\ \mathbf{elif}\;\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1} \le 4.94066 \cdot 10^{-324}:\\ \;\;\;\;\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{\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)}\\ \end{array}\]

Reproduce

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