Average Error: 29.5 → 0.5
Time: 34.8s
Precision: 64
\[\frac{x}{x + 1} - \frac{x + 1}{x - 1}\]
\[\begin{array}{l} \mathbf{if}\;x \le -1.311384526318253085364062826556619256735:\\ \;\;\;\;\left(-\frac{3}{\left(x \cdot x\right) \cdot x}\right) - \left(\frac{1}{x \cdot x} + \frac{3}{x}\right)\\ \mathbf{elif}\;x \le 1.02083405594772891333832376403734087944:\\ \;\;\;\;\frac{x}{x + 1} - \left(-\mathsf{fma}\left(2, x + x \cdot x, 1\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(-\frac{3}{\left(x \cdot x\right) \cdot x}\right) - \left(\frac{1}{x \cdot x} + \frac{3}{x}\right)\\ \end{array}\]
\frac{x}{x + 1} - \frac{x + 1}{x - 1}
\begin{array}{l}
\mathbf{if}\;x \le -1.311384526318253085364062826556619256735:\\
\;\;\;\;\left(-\frac{3}{\left(x \cdot x\right) \cdot x}\right) - \left(\frac{1}{x \cdot x} + \frac{3}{x}\right)\\

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

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

\end{array}
double f(double x) {
        double r4639620 = x;
        double r4639621 = 1.0;
        double r4639622 = r4639620 + r4639621;
        double r4639623 = r4639620 / r4639622;
        double r4639624 = r4639620 - r4639621;
        double r4639625 = r4639622 / r4639624;
        double r4639626 = r4639623 - r4639625;
        return r4639626;
}

double f(double x) {
        double r4639627 = x;
        double r4639628 = -1.311384526318253;
        bool r4639629 = r4639627 <= r4639628;
        double r4639630 = 3.0;
        double r4639631 = r4639627 * r4639627;
        double r4639632 = r4639631 * r4639627;
        double r4639633 = r4639630 / r4639632;
        double r4639634 = -r4639633;
        double r4639635 = 1.0;
        double r4639636 = r4639635 / r4639631;
        double r4639637 = r4639630 / r4639627;
        double r4639638 = r4639636 + r4639637;
        double r4639639 = r4639634 - r4639638;
        double r4639640 = 1.020834055947729;
        bool r4639641 = r4639627 <= r4639640;
        double r4639642 = r4639627 + r4639635;
        double r4639643 = r4639627 / r4639642;
        double r4639644 = 2.0;
        double r4639645 = r4639627 + r4639631;
        double r4639646 = fma(r4639644, r4639645, r4639635);
        double r4639647 = -r4639646;
        double r4639648 = r4639643 - r4639647;
        double r4639649 = r4639641 ? r4639648 : r4639639;
        double r4639650 = r4639629 ? r4639639 : r4639649;
        return r4639650;
}

Error

Bits error versus x

Derivation

  1. Split input into 2 regimes
  2. if x < -1.311384526318253 or 1.020834055947729 < x

    1. Initial program 58.6

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

      \[\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.4

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

    if -1.311384526318253 < x < 1.020834055947729

    1. Initial program 0.0

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

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

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

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

Reproduce

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