Average Error: 28.8 → 0.1
Time: 29.4s
Precision: 64
\[\frac{x}{x + 1} - \frac{x + 1}{x - 1}\]
\[\begin{array}{l} \mathbf{if}\;x \le -18305.620511464476:\\ \;\;\;\;\left(\frac{-3}{\left(x \cdot x\right) \cdot x} + \frac{-3}{x}\right) + \frac{-1}{x \cdot x}\\ \mathbf{elif}\;x \le 13913.189376161075:\\ \;\;\;\;\frac{x}{1 + x} - \mathsf{log1p}\left(\mathsf{expm1}\left(\frac{1 + x}{x - 1}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{-3}{\left(x \cdot x\right) \cdot x} + \frac{-3}{x}\right) + \frac{-1}{x \cdot x}\\ \end{array}\]
\frac{x}{x + 1} - \frac{x + 1}{x - 1}
\begin{array}{l}
\mathbf{if}\;x \le -18305.620511464476:\\
\;\;\;\;\left(\frac{-3}{\left(x \cdot x\right) \cdot x} + \frac{-3}{x}\right) + \frac{-1}{x \cdot x}\\

\mathbf{elif}\;x \le 13913.189376161075:\\
\;\;\;\;\frac{x}{1 + x} - \mathsf{log1p}\left(\mathsf{expm1}\left(\frac{1 + x}{x - 1}\right)\right)\\

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

\end{array}
double f(double x) {
        double r4603753 = x;
        double r4603754 = 1.0;
        double r4603755 = r4603753 + r4603754;
        double r4603756 = r4603753 / r4603755;
        double r4603757 = r4603753 - r4603754;
        double r4603758 = r4603755 / r4603757;
        double r4603759 = r4603756 - r4603758;
        return r4603759;
}

double f(double x) {
        double r4603760 = x;
        double r4603761 = -18305.620511464476;
        bool r4603762 = r4603760 <= r4603761;
        double r4603763 = -3.0;
        double r4603764 = r4603760 * r4603760;
        double r4603765 = r4603764 * r4603760;
        double r4603766 = r4603763 / r4603765;
        double r4603767 = r4603763 / r4603760;
        double r4603768 = r4603766 + r4603767;
        double r4603769 = -1.0;
        double r4603770 = r4603769 / r4603764;
        double r4603771 = r4603768 + r4603770;
        double r4603772 = 13913.189376161075;
        bool r4603773 = r4603760 <= r4603772;
        double r4603774 = 1.0;
        double r4603775 = r4603774 + r4603760;
        double r4603776 = r4603760 / r4603775;
        double r4603777 = r4603760 - r4603774;
        double r4603778 = r4603775 / r4603777;
        double r4603779 = expm1(r4603778);
        double r4603780 = log1p(r4603779);
        double r4603781 = r4603776 - r4603780;
        double r4603782 = r4603773 ? r4603781 : r4603771;
        double r4603783 = r4603762 ? r4603771 : r4603782;
        return r4603783;
}

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 < -18305.620511464476 or 13913.189376161075 < x

    1. Initial program 59.4

      \[\frac{x}{x + 1} - \frac{x + 1}{x - 1}\]
    2. Using strategy rm
    3. Applied log1p-expm1-u59.4

      \[\leadsto \frac{x}{x + 1} - \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(\frac{x + 1}{x - 1}\right)\right)}\]
    4. Taylor expanded around -inf 0.3

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

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

    if -18305.620511464476 < x < 13913.189376161075

    1. Initial program 0.1

      \[\frac{x}{x + 1} - \frac{x + 1}{x - 1}\]
    2. Using strategy rm
    3. Applied log1p-expm1-u0.1

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -18305.620511464476:\\ \;\;\;\;\left(\frac{-3}{\left(x \cdot x\right) \cdot x} + \frac{-3}{x}\right) + \frac{-1}{x \cdot x}\\ \mathbf{elif}\;x \le 13913.189376161075:\\ \;\;\;\;\frac{x}{1 + x} - \mathsf{log1p}\left(\mathsf{expm1}\left(\frac{1 + x}{x - 1}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{-3}{\left(x \cdot x\right) \cdot x} + \frac{-3}{x}\right) + \frac{-1}{x \cdot x}\\ \end{array}\]

Reproduce

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