Average Error: 14.7 → 0.4
Time: 28.9s
Precision: 64
\[\frac{1}{x + 1} - \frac{1}{x - 1}\]
\[\begin{array}{l} \mathbf{if}\;x \le -1.002637632358202246507516974816098809242:\\ \;\;\;\;-\left(\frac{\frac{2}{x}}{x} + \left(\frac{2}{\left(x \cdot x\right) \cdot \left(\left(x \cdot x\right) \cdot \left(x \cdot x\right)\right)} + \frac{2}{\left(x \cdot x\right) \cdot \left(x \cdot x\right)}\right)\right)\\ \mathbf{elif}\;x \le 1.257540011667535484463087414042092859745:\\ \;\;\;\;\left(\mathsf{fma}\left(x, x \cdot 1, 1\right) - x \cdot 1\right) - \frac{1}{x - 1}\\ \mathbf{else}:\\ \;\;\;\;-\left(\frac{\frac{2}{x}}{x} + \left(\frac{2}{\left(x \cdot x\right) \cdot \left(\left(x \cdot x\right) \cdot \left(x \cdot x\right)\right)} + \frac{2}{\left(x \cdot x\right) \cdot \left(x \cdot x\right)}\right)\right)\\ \end{array}\]
\frac{1}{x + 1} - \frac{1}{x - 1}
\begin{array}{l}
\mathbf{if}\;x \le -1.002637632358202246507516974816098809242:\\
\;\;\;\;-\left(\frac{\frac{2}{x}}{x} + \left(\frac{2}{\left(x \cdot x\right) \cdot \left(\left(x \cdot x\right) \cdot \left(x \cdot x\right)\right)} + \frac{2}{\left(x \cdot x\right) \cdot \left(x \cdot x\right)}\right)\right)\\

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

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

\end{array}
double f(double x) {
        double r6001608 = 1.0;
        double r6001609 = x;
        double r6001610 = r6001609 + r6001608;
        double r6001611 = r6001608 / r6001610;
        double r6001612 = r6001609 - r6001608;
        double r6001613 = r6001608 / r6001612;
        double r6001614 = r6001611 - r6001613;
        return r6001614;
}

double f(double x) {
        double r6001615 = x;
        double r6001616 = -1.0026376323582022;
        bool r6001617 = r6001615 <= r6001616;
        double r6001618 = 2.0;
        double r6001619 = r6001618 / r6001615;
        double r6001620 = r6001619 / r6001615;
        double r6001621 = r6001615 * r6001615;
        double r6001622 = r6001621 * r6001621;
        double r6001623 = r6001621 * r6001622;
        double r6001624 = r6001618 / r6001623;
        double r6001625 = r6001618 / r6001622;
        double r6001626 = r6001624 + r6001625;
        double r6001627 = r6001620 + r6001626;
        double r6001628 = -r6001627;
        double r6001629 = 1.2575400116675355;
        bool r6001630 = r6001615 <= r6001629;
        double r6001631 = 1.0;
        double r6001632 = r6001615 * r6001631;
        double r6001633 = fma(r6001615, r6001632, r6001631);
        double r6001634 = r6001633 - r6001632;
        double r6001635 = r6001615 - r6001631;
        double r6001636 = r6001631 / r6001635;
        double r6001637 = r6001634 - r6001636;
        double r6001638 = r6001630 ? r6001637 : r6001628;
        double r6001639 = r6001617 ? r6001628 : r6001638;
        return r6001639;
}

Error

Bits error versus x

Derivation

  1. Split input into 2 regimes
  2. if x < -1.0026376323582022 or 1.2575400116675355 < x

    1. Initial program 29.2

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

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

      \[\leadsto \color{blue}{-\left(\left(\frac{2}{\left(x \cdot x\right) \cdot \left(x \cdot x\right)} + \frac{2}{\left(\left(x \cdot x\right) \cdot \left(x \cdot x\right)\right) \cdot \left(x \cdot x\right)}\right) + \frac{2}{x \cdot x}\right)}\]
    4. Using strategy rm
    5. Applied associate-/r*0.3

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

    if -1.0026376323582022 < x < 1.2575400116675355

    1. Initial program 0.0

      \[\frac{1}{x + 1} - \frac{1}{x - 1}\]
    2. Taylor expanded around 0 0.5

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

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

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

Reproduce

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