Average Error: 29.4 → 0.0
Time: 13.5s
Precision: 64
\[\frac{x}{x + 1} - \frac{x + 1}{x - 1}\]
\[\begin{array}{l} \mathbf{if}\;x \le -10978.06154230227366497274488210678100586:\\ \;\;\;\;-\left(\frac{3}{x} + \left(\frac{1}{x \cdot x} + \frac{3}{\left(x \cdot x\right) \cdot x}\right)\right)\\ \mathbf{elif}\;x \le 11708.85496823561516066547483205795288086:\\ \;\;\;\;\mathsf{fma}\left(x, \frac{1}{x + 1}, \frac{-\left(x + 1\right)}{x - 1}\right)\\ \mathbf{else}:\\ \;\;\;\;-\left(\frac{3}{x} + \left(\frac{1}{x \cdot x} + \frac{3}{\left(x \cdot x\right) \cdot x}\right)\right)\\ \end{array}\]
\frac{x}{x + 1} - \frac{x + 1}{x - 1}
\begin{array}{l}
\mathbf{if}\;x \le -10978.06154230227366497274488210678100586:\\
\;\;\;\;-\left(\frac{3}{x} + \left(\frac{1}{x \cdot x} + \frac{3}{\left(x \cdot x\right) \cdot x}\right)\right)\\

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

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

\end{array}
double f(double x) {
        double r4766483 = x;
        double r4766484 = 1.0;
        double r4766485 = r4766483 + r4766484;
        double r4766486 = r4766483 / r4766485;
        double r4766487 = r4766483 - r4766484;
        double r4766488 = r4766485 / r4766487;
        double r4766489 = r4766486 - r4766488;
        return r4766489;
}

double f(double x) {
        double r4766490 = x;
        double r4766491 = -10978.061542302274;
        bool r4766492 = r4766490 <= r4766491;
        double r4766493 = 3.0;
        double r4766494 = r4766493 / r4766490;
        double r4766495 = 1.0;
        double r4766496 = r4766490 * r4766490;
        double r4766497 = r4766495 / r4766496;
        double r4766498 = r4766496 * r4766490;
        double r4766499 = r4766493 / r4766498;
        double r4766500 = r4766497 + r4766499;
        double r4766501 = r4766494 + r4766500;
        double r4766502 = -r4766501;
        double r4766503 = 11708.854968235615;
        bool r4766504 = r4766490 <= r4766503;
        double r4766505 = 1.0;
        double r4766506 = r4766490 + r4766495;
        double r4766507 = r4766505 / r4766506;
        double r4766508 = -r4766506;
        double r4766509 = r4766490 - r4766495;
        double r4766510 = r4766508 / r4766509;
        double r4766511 = fma(r4766490, r4766507, r4766510);
        double r4766512 = r4766504 ? r4766511 : r4766502;
        double r4766513 = r4766492 ? r4766502 : r4766512;
        return r4766513;
}

Error

Bits error versus x

Derivation

  1. Split input into 2 regimes
  2. if x < -10978.061542302274 or 11708.854968235615 < 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(3 \cdot \frac{1}{{x}^{3}} + \left(1 \cdot \frac{1}{{x}^{2}} + 3 \cdot \frac{1}{x}\right)\right)}\]
    3. Simplified0.0

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

    if -10978.061542302274 < x < 11708.854968235615

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -10978.06154230227366497274488210678100586:\\ \;\;\;\;-\left(\frac{3}{x} + \left(\frac{1}{x \cdot x} + \frac{3}{\left(x \cdot x\right) \cdot x}\right)\right)\\ \mathbf{elif}\;x \le 11708.85496823561516066547483205795288086:\\ \;\;\;\;\mathsf{fma}\left(x, \frac{1}{x + 1}, \frac{-\left(x + 1\right)}{x - 1}\right)\\ \mathbf{else}:\\ \;\;\;\;-\left(\frac{3}{x} + \left(\frac{1}{x \cdot x} + \frac{3}{\left(x \cdot x\right) \cdot x}\right)\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019171 +o rules:numerics
(FPCore (x)
  :name "Asymptote C"
  (- (/ x (+ x 1.0)) (/ (+ x 1.0) (- x 1.0))))