Average Error: 29.3 → 0.1
Time: 24.7s
Precision: 64
\[\frac{x}{x + 1} - \frac{x + 1}{x - 1}\]
\[\begin{array}{l} \mathbf{if}\;x \le -11378.67658513413334731012582778930664062 \lor \neg \left(x \le 14855.11766365100083930883556604385375977\right):\\ \;\;\;\;\left(-\frac{1}{x \cdot x}\right) - \left(\frac{3}{{x}^{3}} + \frac{3}{x}\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{1}{x + 1}, \frac{1}{\frac{1}{x}}, \frac{-\left(1 + x\right)}{x - 1}\right)\\ \end{array}\]
\frac{x}{x + 1} - \frac{x + 1}{x - 1}
\begin{array}{l}
\mathbf{if}\;x \le -11378.67658513413334731012582778930664062 \lor \neg \left(x \le 14855.11766365100083930883556604385375977\right):\\
\;\;\;\;\left(-\frac{1}{x \cdot x}\right) - \left(\frac{3}{{x}^{3}} + \frac{3}{x}\right)\\

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{x + 1}, \frac{1}{\frac{1}{x}}, \frac{-\left(1 + x\right)}{x - 1}\right)\\

\end{array}
double f(double x) {
        double r86315 = x;
        double r86316 = 1.0;
        double r86317 = r86315 + r86316;
        double r86318 = r86315 / r86317;
        double r86319 = r86315 - r86316;
        double r86320 = r86317 / r86319;
        double r86321 = r86318 - r86320;
        return r86321;
}

double f(double x) {
        double r86322 = x;
        double r86323 = -11378.676585134133;
        bool r86324 = r86322 <= r86323;
        double r86325 = 14855.117663651;
        bool r86326 = r86322 <= r86325;
        double r86327 = !r86326;
        bool r86328 = r86324 || r86327;
        double r86329 = 1.0;
        double r86330 = r86322 * r86322;
        double r86331 = r86329 / r86330;
        double r86332 = -r86331;
        double r86333 = 3.0;
        double r86334 = 3.0;
        double r86335 = pow(r86322, r86334);
        double r86336 = r86333 / r86335;
        double r86337 = r86333 / r86322;
        double r86338 = r86336 + r86337;
        double r86339 = r86332 - r86338;
        double r86340 = 1.0;
        double r86341 = r86322 + r86329;
        double r86342 = r86340 / r86341;
        double r86343 = r86340 / r86322;
        double r86344 = r86340 / r86343;
        double r86345 = r86329 + r86322;
        double r86346 = -r86345;
        double r86347 = r86322 - r86329;
        double r86348 = r86346 / r86347;
        double r86349 = fma(r86342, r86344, r86348);
        double r86350 = r86328 ? r86339 : r86349;
        return r86350;
}

Error

Bits error versus x

Derivation

  1. Split input into 2 regimes
  2. if x < -11378.676585134133 or 14855.117663651 < x

    1. Initial program 59.4

      \[\frac{x}{x + 1} - \frac{x + 1}{x - 1}\]
    2. Simplified59.4

      \[\leadsto \color{blue}{\frac{x}{x + 1} - \frac{1 + x}{x - 1}}\]
    3. 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)}\]
    4. Simplified0.0

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

    if -11378.676585134133 < x < 14855.117663651

    1. Initial program 0.1

      \[\frac{x}{x + 1} - \frac{x + 1}{x - 1}\]
    2. Simplified0.1

      \[\leadsto \color{blue}{\frac{x}{x + 1} - \frac{1 + x}{x - 1}}\]
    3. Using strategy rm
    4. Applied clear-num0.1

      \[\leadsto \color{blue}{\frac{1}{\frac{x + 1}{x}}} - \frac{1 + x}{x - 1}\]
    5. Using strategy rm
    6. Applied div-inv0.1

      \[\leadsto \frac{1}{\color{blue}{\left(x + 1\right) \cdot \frac{1}{x}}} - \frac{1 + x}{x - 1}\]
    7. Applied *-un-lft-identity0.1

      \[\leadsto \frac{\color{blue}{1 \cdot 1}}{\left(x + 1\right) \cdot \frac{1}{x}} - \frac{1 + x}{x - 1}\]
    8. Applied times-frac0.1

      \[\leadsto \color{blue}{\frac{1}{x + 1} \cdot \frac{1}{\frac{1}{x}}} - \frac{1 + x}{x - 1}\]
    9. Applied fma-neg0.1

      \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{1}{x + 1}, \frac{1}{\frac{1}{x}}, -\frac{1 + x}{x - 1}\right)}\]
    10. Simplified0.1

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -11378.67658513413334731012582778930664062 \lor \neg \left(x \le 14855.11766365100083930883556604385375977\right):\\ \;\;\;\;\left(-\frac{1}{x \cdot x}\right) - \left(\frac{3}{{x}^{3}} + \frac{3}{x}\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{1}{x + 1}, \frac{1}{\frac{1}{x}}, \frac{-\left(1 + x\right)}{x - 1}\right)\\ \end{array}\]

Reproduce

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