\frac{x}{x + 1} - \frac{x + 1}{x - 1}\begin{array}{l}
\mathbf{if}\;x \le -11378.67658513413334731012582778930664062 \lor \neg \left(x \le 14855.11766365100083930883556604385375977\right):\\
\;\;\;\;\left(-\frac{1}{x \cdot x}\right) - \left(\frac{3}{{x}^{3}} + \frac{3}{x}\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{x + 1}, \frac{1}{\frac{1}{x}}, \frac{-\left(1 + x\right)}{x - 1}\right)\\
\end{array}double f(double x) {
double r86315 = x;
double r86316 = 1.0;
double r86317 = r86315 + r86316;
double r86318 = r86315 / r86317;
double r86319 = r86315 - r86316;
double r86320 = r86317 / r86319;
double r86321 = r86318 - r86320;
return r86321;
}
double f(double x) {
double r86322 = x;
double r86323 = -11378.676585134133;
bool r86324 = r86322 <= r86323;
double r86325 = 14855.117663651;
bool r86326 = r86322 <= r86325;
double r86327 = !r86326;
bool r86328 = r86324 || r86327;
double r86329 = 1.0;
double r86330 = r86322 * r86322;
double r86331 = r86329 / r86330;
double r86332 = -r86331;
double r86333 = 3.0;
double r86334 = 3.0;
double r86335 = pow(r86322, r86334);
double r86336 = r86333 / r86335;
double r86337 = r86333 / r86322;
double r86338 = r86336 + r86337;
double r86339 = r86332 - r86338;
double r86340 = 1.0;
double r86341 = r86322 + r86329;
double r86342 = r86340 / r86341;
double r86343 = r86340 / r86322;
double r86344 = r86340 / r86343;
double r86345 = r86329 + r86322;
double r86346 = -r86345;
double r86347 = r86322 - r86329;
double r86348 = r86346 / r86347;
double r86349 = fma(r86342, r86344, r86348);
double r86350 = r86328 ? r86339 : r86349;
return r86350;
}



Bits error versus x
if x < -11378.676585134133 or 14855.117663651 < x Initial program 59.4
Simplified59.4
Taylor expanded around inf 0.3
Simplified0.0
if -11378.676585134133 < x < 14855.117663651Initial program 0.1
Simplified0.1
rmApplied clear-num0.1
rmApplied div-inv0.1
Applied *-un-lft-identity0.1
Applied times-frac0.1
Applied fma-neg0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2019305 +o rules:numerics
(FPCore (x)
:name "Asymptote C"
:precision binary64
(- (/ x (+ x 1)) (/ (+ x 1) (- x 1))))