\frac{x}{x + 1} - \frac{x + 1}{x - 1}\begin{array}{l}
\mathbf{if}\;x \le -0.9868159492179903180542055451951455324888 \lor \neg \left(x \le 0.9975580681503711799607003740675281733274\right):\\
\;\;\;\;\left(-\frac{3 + \frac{1}{x}}{x}\right) - \frac{3}{{x}^{3}}\\
\mathbf{else}:\\
\;\;\;\;x \cdot \left(3 + 1 \cdot x\right) + 1\\
\end{array}double f(double x) {
double r99283 = x;
double r99284 = 1.0;
double r99285 = r99283 + r99284;
double r99286 = r99283 / r99285;
double r99287 = r99283 - r99284;
double r99288 = r99285 / r99287;
double r99289 = r99286 - r99288;
return r99289;
}
double f(double x) {
double r99290 = x;
double r99291 = -0.9868159492179903;
bool r99292 = r99290 <= r99291;
double r99293 = 0.9975580681503712;
bool r99294 = r99290 <= r99293;
double r99295 = !r99294;
bool r99296 = r99292 || r99295;
double r99297 = 3.0;
double r99298 = 1.0;
double r99299 = r99298 / r99290;
double r99300 = r99297 + r99299;
double r99301 = r99300 / r99290;
double r99302 = -r99301;
double r99303 = 3.0;
double r99304 = pow(r99290, r99303);
double r99305 = r99297 / r99304;
double r99306 = r99302 - r99305;
double r99307 = r99298 * r99290;
double r99308 = r99297 + r99307;
double r99309 = r99290 * r99308;
double r99310 = r99309 + r99298;
double r99311 = r99296 ? r99306 : r99310;
return r99311;
}



Bits error versus x
Results
if x < -0.9868159492179903 or 0.9975580681503712 < x Initial program 58.6
Taylor expanded around inf 0.7
Simplified0.7
rmApplied div-inv0.7
Applied associate-*l*0.7
Simplified0.4
if -0.9868159492179903 < x < 0.9975580681503712Initial program 0.0
Taylor expanded around 0 0.5
Simplified0.5
Final simplification0.5
herbie shell --seed 2019351
(FPCore (x)
:name "Asymptote C"
:precision binary64
(- (/ x (+ x 1)) (/ (+ x 1) (- x 1))))