Average Error: 10.2 → 0.4
Time: 10.4s
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 -0.3774919857991819172049474673258373513818:\\ \;\;\;\;\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 7.340753439138980596112560306210070848465 \cdot 10^{-15}:\\ \;\;\;\;2 \cdot \left(\frac{1}{{x}^{7}} + \left(\frac{1}{{x}^{5}} + {x}^{\left(-3\right)}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(1 - \left(1 \cdot x + 2 \cdot \frac{1}{x}\right)\right) + \frac{1}{x - 1}\\ \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 -0.3774919857991819172049474673258373513818:\\
\;\;\;\;\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 7.340753439138980596112560306210070848465 \cdot 10^{-15}:\\
\;\;\;\;2 \cdot \left(\frac{1}{{x}^{7}} + \left(\frac{1}{{x}^{5}} + {x}^{\left(-3\right)}\right)\right)\\

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

\end{array}
double f(double x) {
        double r94713 = 1.0;
        double r94714 = x;
        double r94715 = r94714 + r94713;
        double r94716 = r94713 / r94715;
        double r94717 = 2.0;
        double r94718 = r94717 / r94714;
        double r94719 = r94716 - r94718;
        double r94720 = r94714 - r94713;
        double r94721 = r94713 / r94720;
        double r94722 = r94719 + r94721;
        return r94722;
}

double f(double x) {
        double r94723 = 1.0;
        double r94724 = x;
        double r94725 = r94724 + r94723;
        double r94726 = r94723 / r94725;
        double r94727 = 2.0;
        double r94728 = r94727 / r94724;
        double r94729 = r94726 - r94728;
        double r94730 = r94724 - r94723;
        double r94731 = r94723 / r94730;
        double r94732 = r94729 + r94731;
        double r94733 = -0.3774919857991819;
        bool r94734 = r94732 <= r94733;
        double r94735 = 7.34075343913898e-15;
        bool r94736 = r94732 <= r94735;
        double r94737 = 1.0;
        double r94738 = 7.0;
        double r94739 = pow(r94724, r94738);
        double r94740 = r94737 / r94739;
        double r94741 = 5.0;
        double r94742 = pow(r94724, r94741);
        double r94743 = r94737 / r94742;
        double r94744 = 3.0;
        double r94745 = -r94744;
        double r94746 = pow(r94724, r94745);
        double r94747 = r94743 + r94746;
        double r94748 = r94740 + r94747;
        double r94749 = r94727 * r94748;
        double r94750 = r94723 * r94724;
        double r94751 = r94737 / r94724;
        double r94752 = r94727 * r94751;
        double r94753 = r94750 + r94752;
        double r94754 = r94723 - r94753;
        double r94755 = r94754 + r94731;
        double r94756 = r94736 ? r94749 : r94755;
        double r94757 = r94734 ? r94732 : r94756;
        return r94757;
}

Error

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original10.2
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))) < -0.3774919857991819

    1. Initial program 0.0

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

    if -0.3774919857991819 < (+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0))) < 7.34075343913898e-15

    1. Initial program 20.2

      \[\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}^{5}} + 2 \cdot \frac{1}{{x}^{3}}\right)}\]
    3. Simplified0.6

      \[\leadsto \color{blue}{2 \cdot \left(\frac{1}{{x}^{7}} + \left(\frac{1}{{x}^{5}} + \frac{1}{{x}^{3}}\right)\right)}\]
    4. Using strategy rm
    5. Applied pow-flip0.1

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

    if 7.34075343913898e-15 < (+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0)))

    1. Initial program 0.3

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

      \[\leadsto \color{blue}{\left(1 - \left(1 \cdot x + 2 \cdot \frac{1}{x}\right)\right)} + \frac{1}{x - 1}\]
  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 -0.3774919857991819172049474673258373513818:\\ \;\;\;\;\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 7.340753439138980596112560306210070848465 \cdot 10^{-15}:\\ \;\;\;\;2 \cdot \left(\frac{1}{{x}^{7}} + \left(\frac{1}{{x}^{5}} + {x}^{\left(-3\right)}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(1 - \left(1 \cdot x + 2 \cdot \frac{1}{x}\right)\right) + \frac{1}{x - 1}\\ \end{array}\]

Reproduce

herbie shell --seed 2019298 
(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))))