Average Error: 29.5 → 0.1
Time: 35.2s
Precision: 64
\[\frac{x}{x + 1} - \frac{x + 1}{x - 1}\]
\[\begin{array}{l} \mathbf{if}\;x \le -1.006460284952229500277098850347101688385 \lor \neg \left(x \le 9050.184745868966274429112672805786132812\right):\\ \;\;\;\;-\left(\left(\frac{1}{x \cdot x} + \frac{3}{x}\right) + \frac{3}{{x}^{3}}\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{x}{x + 1} - \frac{\sqrt{x + 1}}{\frac{x - 1}{\sqrt{x + 1}}}\\ \end{array}\]
\frac{x}{x + 1} - \frac{x + 1}{x - 1}
\begin{array}{l}
\mathbf{if}\;x \le -1.006460284952229500277098850347101688385 \lor \neg \left(x \le 9050.184745868966274429112672805786132812\right):\\
\;\;\;\;-\left(\left(\frac{1}{x \cdot x} + \frac{3}{x}\right) + \frac{3}{{x}^{3}}\right)\\

\mathbf{else}:\\
\;\;\;\;\frac{x}{x + 1} - \frac{\sqrt{x + 1}}{\frac{x - 1}{\sqrt{x + 1}}}\\

\end{array}
double f(double x) {
        double r144131 = x;
        double r144132 = 1.0;
        double r144133 = r144131 + r144132;
        double r144134 = r144131 / r144133;
        double r144135 = r144131 - r144132;
        double r144136 = r144133 / r144135;
        double r144137 = r144134 - r144136;
        return r144137;
}

double f(double x) {
        double r144138 = x;
        double r144139 = -1.0064602849522295;
        bool r144140 = r144138 <= r144139;
        double r144141 = 9050.184745868966;
        bool r144142 = r144138 <= r144141;
        double r144143 = !r144142;
        bool r144144 = r144140 || r144143;
        double r144145 = 1.0;
        double r144146 = r144138 * r144138;
        double r144147 = r144145 / r144146;
        double r144148 = 3.0;
        double r144149 = r144148 / r144138;
        double r144150 = r144147 + r144149;
        double r144151 = 3.0;
        double r144152 = pow(r144138, r144151);
        double r144153 = r144148 / r144152;
        double r144154 = r144150 + r144153;
        double r144155 = -r144154;
        double r144156 = r144138 + r144145;
        double r144157 = r144138 / r144156;
        double r144158 = sqrt(r144156);
        double r144159 = r144138 - r144145;
        double r144160 = r144159 / r144158;
        double r144161 = r144158 / r144160;
        double r144162 = r144157 - r144161;
        double r144163 = r144144 ? r144155 : r144162;
        return r144163;
}

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 < -1.0064602849522295 or 9050.184745868966 < x

    1. Initial program 58.7

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

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

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

    if -1.0064602849522295 < x < 9050.184745868966

    1. Initial program 0.0

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

      \[\leadsto \frac{x}{x + 1} - \frac{\color{blue}{\sqrt{x + 1} \cdot \sqrt{x + 1}}}{x - 1}\]
    4. Applied associate-/l*0.1

      \[\leadsto \frac{x}{x + 1} - \color{blue}{\frac{\sqrt{x + 1}}{\frac{x - 1}{\sqrt{x + 1}}}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.1

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -1.006460284952229500277098850347101688385 \lor \neg \left(x \le 9050.184745868966274429112672805786132812\right):\\ \;\;\;\;-\left(\left(\frac{1}{x \cdot x} + \frac{3}{x}\right) + \frac{3}{{x}^{3}}\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{x}{x + 1} - \frac{\sqrt{x + 1}}{\frac{x - 1}{\sqrt{x + 1}}}\\ \end{array}\]

Reproduce

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