Average Error: 29.7 → 0.1
Time: 5.3s
Precision: 64
\[\frac{x}{x + 1} - \frac{x + 1}{x - 1}\]
\[\begin{array}{l} \mathbf{if}\;x \le -17519.327964058364 \lor \neg \left(x \le 13449.2242533471308\right):\\ \;\;\;\;\frac{-1}{{x}^{2}} - \mathsf{fma}\left(3, \frac{1}{{x}^{3}}, \frac{3}{x}\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(x, \frac{1}{x + 1}, -\frac{x + 1}{x - 1}\right)\\ \end{array}\]
\frac{x}{x + 1} - \frac{x + 1}{x - 1}
\begin{array}{l}
\mathbf{if}\;x \le -17519.327964058364 \lor \neg \left(x \le 13449.2242533471308\right):\\
\;\;\;\;\frac{-1}{{x}^{2}} - \mathsf{fma}\left(3, \frac{1}{{x}^{3}}, \frac{3}{x}\right)\\

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

\end{array}
double f(double x) {
        double r129110 = x;
        double r129111 = 1.0;
        double r129112 = r129110 + r129111;
        double r129113 = r129110 / r129112;
        double r129114 = r129110 - r129111;
        double r129115 = r129112 / r129114;
        double r129116 = r129113 - r129115;
        return r129116;
}

double f(double x) {
        double r129117 = x;
        double r129118 = -17519.327964058364;
        bool r129119 = r129117 <= r129118;
        double r129120 = 13449.22425334713;
        bool r129121 = r129117 <= r129120;
        double r129122 = !r129121;
        bool r129123 = r129119 || r129122;
        double r129124 = 1.0;
        double r129125 = -r129124;
        double r129126 = 2.0;
        double r129127 = pow(r129117, r129126);
        double r129128 = r129125 / r129127;
        double r129129 = 3.0;
        double r129130 = 1.0;
        double r129131 = 3.0;
        double r129132 = pow(r129117, r129131);
        double r129133 = r129130 / r129132;
        double r129134 = r129129 / r129117;
        double r129135 = fma(r129129, r129133, r129134);
        double r129136 = r129128 - r129135;
        double r129137 = r129117 + r129124;
        double r129138 = r129130 / r129137;
        double r129139 = r129117 - r129124;
        double r129140 = r129137 / r129139;
        double r129141 = -r129140;
        double r129142 = fma(r129117, r129138, r129141);
        double r129143 = r129123 ? r129136 : r129142;
        return r129143;
}

Error

Bits error versus x

Derivation

  1. Split input into 2 regimes
  2. if x < -17519.327964058364 or 13449.22425334713 < x

    1. Initial program 59.3

      \[\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. Taylor expanded around 0 0.3

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

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

    if -17519.327964058364 < x < 13449.22425334713

    1. Initial program 0.1

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

      \[\leadsto \color{blue}{x \cdot \frac{1}{x + 1}} - \frac{x + 1}{x - 1}\]
    4. Applied fma-neg0.1

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

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

Reproduce

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