Average Error: 29.1 → 0.1
Time: 20.5s
Precision: 64
\[\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}\]
\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;
}

Error

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 2 regimes
  2. if x < -13801.088468895898 or 14618.947191620917 < x

    1. Initial program 59.5

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

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

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

    if -13801.088468895898 < x < 14618.947191620917

    1. Initial program 0.1

      \[\frac{x}{x + 1} - \frac{x + 1}{x - 1}\]
    2. Using strategy rm
    3. Applied add-log-exp0.1

      \[\leadsto \frac{x}{x + 1} - \color{blue}{\log \left(e^{\frac{x + 1}{x - 1}}\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.1

    \[\leadsto \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}\]

Reproduce

herbie shell --seed 2020046 +o rules:numerics
(FPCore (x)
  :name "Asymptote C"
  :precision binary64
  (- (/ x (+ x 1)) (/ (+ x 1) (- x 1))))