Average Error: 9.8 → 0.2
Time: 23.5s
Precision: 64
\[\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\]
\[\begin{array}{l} \mathbf{if}\;x \le -119.33625820905594:\\ \;\;\;\;\frac{\frac{2}{x}}{x \cdot x} + \left(\frac{2}{{x}^{7}} + \frac{2}{{x}^{5}}\right)\\ \mathbf{elif}\;x \le 142.15019730768176:\\ \;\;\;\;\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 - 1\right) \cdot \left(x \cdot \left(1 + x\right)\right)}\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{2}{{x}^{7}} + \frac{2}{{x}^{5}}\right) + \frac{2}{\left(x \cdot x\right) \cdot x}\\ \end{array}\]
\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}
\begin{array}{l}
\mathbf{if}\;x \le -119.33625820905594:\\
\;\;\;\;\frac{\frac{2}{x}}{x \cdot x} + \left(\frac{2}{{x}^{7}} + \frac{2}{{x}^{5}}\right)\\

\mathbf{elif}\;x \le 142.15019730768176:\\
\;\;\;\;\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 - 1\right) \cdot \left(x \cdot \left(1 + x\right)\right)}\\

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

\end{array}
double f(double x) {
        double r3787786 = 1.0;
        double r3787787 = x;
        double r3787788 = r3787787 + r3787786;
        double r3787789 = r3787786 / r3787788;
        double r3787790 = 2.0;
        double r3787791 = r3787790 / r3787787;
        double r3787792 = r3787789 - r3787791;
        double r3787793 = r3787787 - r3787786;
        double r3787794 = r3787786 / r3787793;
        double r3787795 = r3787792 + r3787794;
        return r3787795;
}

double f(double x) {
        double r3787796 = x;
        double r3787797 = -119.33625820905594;
        bool r3787798 = r3787796 <= r3787797;
        double r3787799 = 2.0;
        double r3787800 = r3787799 / r3787796;
        double r3787801 = r3787796 * r3787796;
        double r3787802 = r3787800 / r3787801;
        double r3787803 = 7.0;
        double r3787804 = pow(r3787796, r3787803);
        double r3787805 = r3787799 / r3787804;
        double r3787806 = 5.0;
        double r3787807 = pow(r3787796, r3787806);
        double r3787808 = r3787799 / r3787807;
        double r3787809 = r3787805 + r3787808;
        double r3787810 = r3787802 + r3787809;
        double r3787811 = 142.15019730768176;
        bool r3787812 = r3787796 <= r3787811;
        double r3787813 = 1.0;
        double r3787814 = r3787813 + r3787796;
        double r3787815 = r3787799 * r3787814;
        double r3787816 = r3787796 - r3787815;
        double r3787817 = r3787796 - r3787813;
        double r3787818 = r3787796 * r3787814;
        double r3787819 = fma(r3787816, r3787817, r3787818);
        double r3787820 = r3787817 * r3787818;
        double r3787821 = r3787819 / r3787820;
        double r3787822 = r3787801 * r3787796;
        double r3787823 = r3787799 / r3787822;
        double r3787824 = r3787809 + r3787823;
        double r3787825 = r3787812 ? r3787821 : r3787824;
        double r3787826 = r3787798 ? r3787810 : r3787825;
        return r3787826;
}

Error

Bits error versus x

Target

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

Derivation

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

    1. Initial program 19.2

      \[\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 \cdot \left(x \cdot x\right)} + \left(\frac{2}{{x}^{5}} + \frac{2}{{x}^{7}}\right)}\]
    4. Taylor expanded around -inf 0.7

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

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

    if -119.33625820905594 < x < 142.15019730768176

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

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

    if 142.15019730768176 < x

    1. Initial program 20.2

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

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

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

Reproduce

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