Average Error: 29.3 → 0.3
Time: 20.6s
Precision: 64
\[\frac{x}{x + 1} - \frac{x + 1}{x - 1}\]
\[\begin{array}{l} \mathbf{if}\;\frac{x}{1 + x} - \frac{1 + x}{x - 1} \le 2.034384882776407721394207328557968139648 \cdot 10^{-10}:\\ \;\;\;\;\frac{-3}{{x}^{3}} - \left(\frac{1}{x \cdot x} + \frac{3}{x}\right)\\ \mathbf{else}:\\ \;\;\;\;\log \left(e^{\frac{x}{1 + x} - \frac{1 + x}{x - 1}}\right)\\ \end{array}\]
\frac{x}{x + 1} - \frac{x + 1}{x - 1}
\begin{array}{l}
\mathbf{if}\;\frac{x}{1 + x} - \frac{1 + x}{x - 1} \le 2.034384882776407721394207328557968139648 \cdot 10^{-10}:\\
\;\;\;\;\frac{-3}{{x}^{3}} - \left(\frac{1}{x \cdot x} + \frac{3}{x}\right)\\

\mathbf{else}:\\
\;\;\;\;\log \left(e^{\frac{x}{1 + x} - \frac{1 + x}{x - 1}}\right)\\

\end{array}
double f(double x) {
        double r82974 = x;
        double r82975 = 1.0;
        double r82976 = r82974 + r82975;
        double r82977 = r82974 / r82976;
        double r82978 = r82974 - r82975;
        double r82979 = r82976 / r82978;
        double r82980 = r82977 - r82979;
        return r82980;
}

double f(double x) {
        double r82981 = x;
        double r82982 = 1.0;
        double r82983 = r82982 + r82981;
        double r82984 = r82981 / r82983;
        double r82985 = r82981 - r82982;
        double r82986 = r82983 / r82985;
        double r82987 = r82984 - r82986;
        double r82988 = 2.0343848827764077e-10;
        bool r82989 = r82987 <= r82988;
        double r82990 = 3.0;
        double r82991 = -r82990;
        double r82992 = 3.0;
        double r82993 = pow(r82981, r82992);
        double r82994 = r82991 / r82993;
        double r82995 = r82981 * r82981;
        double r82996 = r82982 / r82995;
        double r82997 = r82990 / r82981;
        double r82998 = r82996 + r82997;
        double r82999 = r82994 - r82998;
        double r83000 = exp(r82987);
        double r83001 = log(r83000);
        double r83002 = r82989 ? r82999 : r83001;
        return r83002;
}

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 (+ x 1.0)) (/ (+ x 1.0) (- x 1.0))) < 2.0343848827764077e-10

    1. Initial program 59.2

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

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

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

    if 2.0343848827764077e-10 < (- (/ x (+ x 1.0)) (/ (+ x 1.0) (- x 1.0)))

    1. Initial program 0.3

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

      \[\leadsto \frac{x}{x + 1} - \color{blue}{\log \left(e^{\frac{x + 1}{x - 1}}\right)}\]
    4. Applied add-log-exp0.3

      \[\leadsto \color{blue}{\log \left(e^{\frac{x}{x + 1}}\right)} - \log \left(e^{\frac{x + 1}{x - 1}}\right)\]
    5. Applied diff-log0.3

      \[\leadsto \color{blue}{\log \left(\frac{e^{\frac{x}{x + 1}}}{e^{\frac{x + 1}{x - 1}}}\right)}\]
    6. Simplified0.3

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{x}{1 + x} - \frac{1 + x}{x - 1} \le 2.034384882776407721394207328557968139648 \cdot 10^{-10}:\\ \;\;\;\;\frac{-3}{{x}^{3}} - \left(\frac{1}{x \cdot x} + \frac{3}{x}\right)\\ \mathbf{else}:\\ \;\;\;\;\log \left(e^{\frac{x}{1 + x} - \frac{1 + x}{x - 1}}\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019179 +o rules:numerics
(FPCore (x)
  :name "Asymptote C"
  (- (/ x (+ x 1.0)) (/ (+ x 1.0) (- x 1.0))))