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

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 < -0.9868159492179903 or 0.9975580681503712 < x

    1. Initial program 58.6

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

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

      \[\leadsto \color{blue}{\frac{-1}{x} \cdot \left(\frac{1}{x} + 3\right) - \frac{3}{{x}^{3}}}\]
    4. Using strategy rm
    5. Applied div-inv0.7

      \[\leadsto \color{blue}{\left(-1 \cdot \frac{1}{x}\right)} \cdot \left(\frac{1}{x} + 3\right) - \frac{3}{{x}^{3}}\]
    6. Applied associate-*l*0.7

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

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

    if -0.9868159492179903 < x < 0.9975580681503712

    1. Initial program 0.0

      \[\frac{x}{x + 1} - \frac{x + 1}{x - 1}\]
    2. Taylor expanded around 0 0.5

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

      \[\leadsto \color{blue}{x \cdot \left(3 + 1 \cdot x\right) + 1}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.5

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

Reproduce

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