Average Error: 29.0 → 0.2
Time: 8.0s
Precision: 64
\[\frac{x}{x + 1} - \frac{x + 1}{x - 1}\]
\[\begin{array}{l} \mathbf{if}\;x \le \frac{-1709098657258643}{137438953472} \lor \neg \left(x \le \frac{6362872999706447}{549755813888}\right):\\ \;\;\;\;\frac{-1}{{x}^{2}} - 3 \cdot \left(\frac{1}{x} + \frac{1}{{x}^{3}}\right)\\ \mathbf{else}:\\ \;\;\;\;\log \left(e^{\frac{x}{x + 1} - \frac{x + 1}{x - 1}}\right)\\ \end{array}\]
\frac{x}{x + 1} - \frac{x + 1}{x - 1}
\begin{array}{l}
\mathbf{if}\;x \le \frac{-1709098657258643}{137438953472} \lor \neg \left(x \le \frac{6362872999706447}{549755813888}\right):\\
\;\;\;\;\frac{-1}{{x}^{2}} - 3 \cdot \left(\frac{1}{x} + \frac{1}{{x}^{3}}\right)\\

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

\end{array}
double f(double x) {
        double r80206 = x;
        double r80207 = 1.0;
        double r80208 = r80206 + r80207;
        double r80209 = r80206 / r80208;
        double r80210 = r80206 - r80207;
        double r80211 = r80208 / r80210;
        double r80212 = r80209 - r80211;
        return r80212;
}

double f(double x) {
        double r80213 = x;
        double r80214 = -1709098657258643.0;
        double r80215 = 137438953472.0;
        double r80216 = r80214 / r80215;
        bool r80217 = r80213 <= r80216;
        double r80218 = 6362872999706447.0;
        double r80219 = 549755813888.0;
        double r80220 = r80218 / r80219;
        bool r80221 = r80213 <= r80220;
        double r80222 = !r80221;
        bool r80223 = r80217 || r80222;
        double r80224 = 1.0;
        double r80225 = -r80224;
        double r80226 = 2.0;
        double r80227 = pow(r80213, r80226);
        double r80228 = r80225 / r80227;
        double r80229 = 3.0;
        double r80230 = 1.0;
        double r80231 = r80230 / r80213;
        double r80232 = 3.0;
        double r80233 = pow(r80213, r80232);
        double r80234 = r80230 / r80233;
        double r80235 = r80231 + r80234;
        double r80236 = r80229 * r80235;
        double r80237 = r80228 - r80236;
        double r80238 = r80213 + r80224;
        double r80239 = r80213 / r80238;
        double r80240 = r80213 - r80224;
        double r80241 = r80238 / r80240;
        double r80242 = r80239 - r80241;
        double r80243 = exp(r80242);
        double r80244 = log(r80243);
        double r80245 = r80223 ? r80237 : r80244;
        return r80245;
}

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 < -12435.329388671693 or 11573.998562574065 < x

    1. Initial program 59.3

      \[\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.3

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

    if -12435.329388671693 < x < 11573.998562574065

    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)}\]
    4. Applied add-log-exp0.1

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

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

      \[\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.2

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le \frac{-1709098657258643}{137438953472} \lor \neg \left(x \le \frac{6362872999706447}{549755813888}\right):\\ \;\;\;\;\frac{-1}{{x}^{2}} - 3 \cdot \left(\frac{1}{x} + \frac{1}{{x}^{3}}\right)\\ \mathbf{else}:\\ \;\;\;\;\log \left(e^{\frac{x}{x + 1} - \frac{x + 1}{x - 1}}\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019304 
(FPCore (x)
  :name "Asymptote C"
  :precision binary64
  (- (/ x (+ x 1)) (/ (+ x 1) (- x 1))))