Average Error: 29.4 → 0.1
Time: 4.8s
Precision: 64
\[\frac{x}{x + 1} - \frac{x + 1}{x - 1}\]
\[\begin{array}{l} \mathbf{if}\;x \le -12879.754469549705 \lor \neg \left(x \le 12427.129501950301\right):\\ \;\;\;\;\mathsf{fma}\left(-1, \frac{\frac{1}{x}}{x}, \frac{-3}{x}\right) - 3 \cdot \frac{1}{{x}^{3}}\\ \mathbf{else}:\\ \;\;\;\;\frac{x \cdot \left(x - 1\right) - \left(x + 1\right) \cdot \left(x + 1\right)}{x \cdot x - 1 \cdot 1}\\ \end{array}\]
\frac{x}{x + 1} - \frac{x + 1}{x - 1}
\begin{array}{l}
\mathbf{if}\;x \le -12879.754469549705 \lor \neg \left(x \le 12427.129501950301\right):\\
\;\;\;\;\mathsf{fma}\left(-1, \frac{\frac{1}{x}}{x}, \frac{-3}{x}\right) - 3 \cdot \frac{1}{{x}^{3}}\\

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

\end{array}
double f(double x) {
        double r122653 = x;
        double r122654 = 1.0;
        double r122655 = r122653 + r122654;
        double r122656 = r122653 / r122655;
        double r122657 = r122653 - r122654;
        double r122658 = r122655 / r122657;
        double r122659 = r122656 - r122658;
        return r122659;
}

double f(double x) {
        double r122660 = x;
        double r122661 = -12879.754469549705;
        bool r122662 = r122660 <= r122661;
        double r122663 = 12427.129501950301;
        bool r122664 = r122660 <= r122663;
        double r122665 = !r122664;
        bool r122666 = r122662 || r122665;
        double r122667 = -1.0;
        double r122668 = 1.0;
        double r122669 = r122668 / r122660;
        double r122670 = r122669 / r122660;
        double r122671 = 3.0;
        double r122672 = -r122671;
        double r122673 = r122672 / r122660;
        double r122674 = fma(r122667, r122670, r122673);
        double r122675 = 1.0;
        double r122676 = 3.0;
        double r122677 = pow(r122660, r122676);
        double r122678 = r122675 / r122677;
        double r122679 = r122671 * r122678;
        double r122680 = r122674 - r122679;
        double r122681 = r122660 - r122668;
        double r122682 = r122660 * r122681;
        double r122683 = r122660 + r122668;
        double r122684 = r122683 * r122683;
        double r122685 = r122682 - r122684;
        double r122686 = r122660 * r122660;
        double r122687 = r122668 * r122668;
        double r122688 = r122686 - r122687;
        double r122689 = r122685 / r122688;
        double r122690 = r122666 ? r122680 : r122689;
        return r122690;
}

Error

Bits error versus x

Derivation

  1. Split input into 2 regimes
  2. if x < -12879.754469549705 or 12427.129501950301 < x

    1. Initial program 59.2

      \[\frac{x}{x + 1} - \frac{x + 1}{x - 1}\]
    2. Taylor expanded around inf 0.3

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

      \[\leadsto \color{blue}{\frac{-1}{{x}^{2}} - \mathsf{fma}\left(3, \frac{1}{x}, 3 \cdot \frac{1}{{x}^{3}}\right)}\]
    4. Using strategy rm
    5. Applied fma-udef0.3

      \[\leadsto \frac{-1}{{x}^{2}} - \color{blue}{\left(3 \cdot \frac{1}{x} + 3 \cdot \frac{1}{{x}^{3}}\right)}\]
    6. Applied associate--r+0.3

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

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

    if -12879.754469549705 < x < 12427.129501950301

    1. Initial program 0.1

      \[\frac{x}{x + 1} - \frac{x + 1}{x - 1}\]
    2. Using strategy rm
    3. Applied frac-sub0.1

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -12879.754469549705 \lor \neg \left(x \le 12427.129501950301\right):\\ \;\;\;\;\mathsf{fma}\left(-1, \frac{\frac{1}{x}}{x}, \frac{-3}{x}\right) - 3 \cdot \frac{1}{{x}^{3}}\\ \mathbf{else}:\\ \;\;\;\;\frac{x \cdot \left(x - 1\right) - \left(x + 1\right) \cdot \left(x + 1\right)}{x \cdot x - 1 \cdot 1}\\ \end{array}\]

Reproduce

herbie shell --seed 2020056 +o rules:numerics
(FPCore (x)
  :name "Asymptote C"
  :precision binary64
  (- (/ x (+ x 1)) (/ (+ x 1) (- x 1))))