\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;
}



Bits error versus x
if x < -1.311384526318253 or 1.020834055947729 < x Initial program 58.6
Taylor expanded around inf 0.7
Simplified0.4
if -1.311384526318253 < x < 1.020834055947729Initial program 0.0
Taylor expanded around 0 0.6
Simplified0.6
Final simplification0.5
herbie shell --seed 2019168 +o rules:numerics
(FPCore (x)
:name "Asymptote C"
(- (/ x (+ x 1.0)) (/ (+ x 1.0) (- x 1.0))))