Average Error: 29.4 → 0.2
Time: 23.2s
Precision: 64
\[\frac{x}{x + 1} - \frac{x + 1}{x - 1}\]
\[\begin{array}{l} \mathbf{if}\;x \le -0.9906799218317323685312203451758250594139:\\ \;\;\;\;\frac{-3}{\left(x \cdot x\right) \cdot x} - \left(\frac{3}{x} + \frac{1}{x \cdot x}\right)\\ \mathbf{elif}\;x \le 9776.984335638540869695134460926055908203:\\ \;\;\;\;\mathsf{fma}\left(x, \frac{1}{x + 1}, -\mathsf{log1p}\left(\mathsf{expm1}\left(\frac{\sqrt{x + 1}}{x - 1} \cdot \sqrt{x + 1}\right)\right)\right) + \frac{x + 1}{x - 1} \cdot 0\\ \mathbf{else}:\\ \;\;\;\;\frac{-3}{\left(x \cdot x\right) \cdot x} - \left(\frac{3}{x} + \frac{1}{x \cdot x}\right)\\ \end{array}\]
\frac{x}{x + 1} - \frac{x + 1}{x - 1}
\begin{array}{l}
\mathbf{if}\;x \le -0.9906799218317323685312203451758250594139:\\
\;\;\;\;\frac{-3}{\left(x \cdot x\right) \cdot x} - \left(\frac{3}{x} + \frac{1}{x \cdot x}\right)\\

\mathbf{elif}\;x \le 9776.984335638540869695134460926055908203:\\
\;\;\;\;\mathsf{fma}\left(x, \frac{1}{x + 1}, -\mathsf{log1p}\left(\mathsf{expm1}\left(\frac{\sqrt{x + 1}}{x - 1} \cdot \sqrt{x + 1}\right)\right)\right) + \frac{x + 1}{x - 1} \cdot 0\\

\mathbf{else}:\\
\;\;\;\;\frac{-3}{\left(x \cdot x\right) \cdot x} - \left(\frac{3}{x} + \frac{1}{x \cdot x}\right)\\

\end{array}
double f(double x) {
        double r6350053 = x;
        double r6350054 = 1.0;
        double r6350055 = r6350053 + r6350054;
        double r6350056 = r6350053 / r6350055;
        double r6350057 = r6350053 - r6350054;
        double r6350058 = r6350055 / r6350057;
        double r6350059 = r6350056 - r6350058;
        return r6350059;
}

double f(double x) {
        double r6350060 = x;
        double r6350061 = -0.9906799218317324;
        bool r6350062 = r6350060 <= r6350061;
        double r6350063 = 3.0;
        double r6350064 = -r6350063;
        double r6350065 = r6350060 * r6350060;
        double r6350066 = r6350065 * r6350060;
        double r6350067 = r6350064 / r6350066;
        double r6350068 = r6350063 / r6350060;
        double r6350069 = 1.0;
        double r6350070 = r6350069 / r6350065;
        double r6350071 = r6350068 + r6350070;
        double r6350072 = r6350067 - r6350071;
        double r6350073 = 9776.98433563854;
        bool r6350074 = r6350060 <= r6350073;
        double r6350075 = 1.0;
        double r6350076 = r6350060 + r6350069;
        double r6350077 = r6350075 / r6350076;
        double r6350078 = sqrt(r6350076);
        double r6350079 = r6350060 - r6350069;
        double r6350080 = r6350078 / r6350079;
        double r6350081 = r6350080 * r6350078;
        double r6350082 = expm1(r6350081);
        double r6350083 = log1p(r6350082);
        double r6350084 = -r6350083;
        double r6350085 = fma(r6350060, r6350077, r6350084);
        double r6350086 = r6350076 / r6350079;
        double r6350087 = 0.0;
        double r6350088 = r6350086 * r6350087;
        double r6350089 = r6350085 + r6350088;
        double r6350090 = r6350074 ? r6350089 : r6350072;
        double r6350091 = r6350062 ? r6350072 : r6350090;
        return r6350091;
}

Error

Bits error versus x

Derivation

  1. Split input into 2 regimes
  2. if x < -0.9906799218317324 or 9776.98433563854 < x

    1. Initial program 58.9

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

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

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

    if -0.9906799218317324 < x < 9776.98433563854

    1. Initial program 0.1

      \[\frac{x}{x + 1} - \frac{x + 1}{x - 1}\]
    2. Using strategy rm
    3. Applied div-inv0.1

      \[\leadsto \frac{x}{x + 1} - \color{blue}{\left(x + 1\right) \cdot \frac{1}{x - 1}}\]
    4. Applied div-inv0.1

      \[\leadsto \color{blue}{x \cdot \frac{1}{x + 1}} - \left(x + 1\right) \cdot \frac{1}{x - 1}\]
    5. Applied prod-diff0.1

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

      \[\leadsto \mathsf{fma}\left(x, \frac{1}{x + 1}, -\frac{1}{x - 1} \cdot \left(x + 1\right)\right) + \color{blue}{\frac{x + 1}{x - 1} \cdot 0}\]
    7. Using strategy rm
    8. Applied log1p-expm1-u0.1

      \[\leadsto \mathsf{fma}\left(x, \frac{1}{x + 1}, -\color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(\frac{1}{x - 1} \cdot \left(x + 1\right)\right)\right)}\right) + \frac{x + 1}{x - 1} \cdot 0\]
    9. Using strategy rm
    10. Applied add-sqr-sqrt0.1

      \[\leadsto \mathsf{fma}\left(x, \frac{1}{x + 1}, -\mathsf{log1p}\left(\mathsf{expm1}\left(\frac{1}{x - 1} \cdot \color{blue}{\left(\sqrt{x + 1} \cdot \sqrt{x + 1}\right)}\right)\right)\right) + \frac{x + 1}{x - 1} \cdot 0\]
    11. Applied associate-*r*0.1

      \[\leadsto \mathsf{fma}\left(x, \frac{1}{x + 1}, -\mathsf{log1p}\left(\mathsf{expm1}\left(\color{blue}{\left(\frac{1}{x - 1} \cdot \sqrt{x + 1}\right) \cdot \sqrt{x + 1}}\right)\right)\right) + \frac{x + 1}{x - 1} \cdot 0\]
    12. Simplified0.1

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -0.9906799218317323685312203451758250594139:\\ \;\;\;\;\frac{-3}{\left(x \cdot x\right) \cdot x} - \left(\frac{3}{x} + \frac{1}{x \cdot x}\right)\\ \mathbf{elif}\;x \le 9776.984335638540869695134460926055908203:\\ \;\;\;\;\mathsf{fma}\left(x, \frac{1}{x + 1}, -\mathsf{log1p}\left(\mathsf{expm1}\left(\frac{\sqrt{x + 1}}{x - 1} \cdot \sqrt{x + 1}\right)\right)\right) + \frac{x + 1}{x - 1} \cdot 0\\ \mathbf{else}:\\ \;\;\;\;\frac{-3}{\left(x \cdot x\right) \cdot x} - \left(\frac{3}{x} + \frac{1}{x \cdot x}\right)\\ \end{array}\]

Reproduce

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