\frac{x}{x + 1} - \frac{x + 1}{x - 1}\begin{array}{l}
\mathbf{if}\;x \le -13801.088468895898 \lor \neg \left(x \le 14618.9471916209168\right):\\
\;\;\;\;\left(-\frac{1}{x \cdot x}\right) - \left(\frac{3}{{x}^{3}} + \frac{3}{x}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{x + 1} - \log \left(e^{\frac{x + 1}{x - 1}}\right)\\
\end{array}double f(double x) {
double r110033 = x;
double r110034 = 1.0;
double r110035 = r110033 + r110034;
double r110036 = r110033 / r110035;
double r110037 = r110033 - r110034;
double r110038 = r110035 / r110037;
double r110039 = r110036 - r110038;
return r110039;
}
double f(double x) {
double r110040 = x;
double r110041 = -13801.088468895898;
bool r110042 = r110040 <= r110041;
double r110043 = 14618.947191620917;
bool r110044 = r110040 <= r110043;
double r110045 = !r110044;
bool r110046 = r110042 || r110045;
double r110047 = 1.0;
double r110048 = r110040 * r110040;
double r110049 = r110047 / r110048;
double r110050 = -r110049;
double r110051 = 3.0;
double r110052 = 3.0;
double r110053 = pow(r110040, r110052);
double r110054 = r110051 / r110053;
double r110055 = r110051 / r110040;
double r110056 = r110054 + r110055;
double r110057 = r110050 - r110056;
double r110058 = r110040 + r110047;
double r110059 = r110040 / r110058;
double r110060 = r110040 - r110047;
double r110061 = r110058 / r110060;
double r110062 = exp(r110061);
double r110063 = log(r110062);
double r110064 = r110059 - r110063;
double r110065 = r110046 ? r110057 : r110064;
return r110065;
}



Bits error versus x
Results
if x < -13801.088468895898 or 14618.947191620917 < x Initial program 59.5
Taylor expanded around inf 0.3
Simplified0.0
if -13801.088468895898 < x < 14618.947191620917Initial program 0.1
rmApplied add-log-exp0.1
Final simplification0.1
herbie shell --seed 2020046 +o rules:numerics
(FPCore (x)
:name "Asymptote C"
:precision binary64
(- (/ x (+ x 1)) (/ (+ x 1) (- x 1))))