Average Error: 29.6 → 0.1
Time: 20.7s
Precision: 64
\[\frac{x}{x + 1} - \frac{x + 1}{x - 1}\]
\[\begin{array}{l} \mathbf{if}\;x \le -13119.88725188772696128580719232559204102 \lor \neg \left(x \le 12089.1663070021731982706114649772644043\right):\\ \;\;\;\;-\left(\frac{1}{x \cdot x} + \left(\frac{3}{x} + \frac{3}{{x}^{3}}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{x}{x + 1} - \mathsf{log1p}\left(\mathsf{expm1}\left(\frac{1 + x}{x - 1}\right)\right)\\ \end{array}\]
\frac{x}{x + 1} - \frac{x + 1}{x - 1}
\begin{array}{l}
\mathbf{if}\;x \le -13119.88725188772696128580719232559204102 \lor \neg \left(x \le 12089.1663070021731982706114649772644043\right):\\
\;\;\;\;-\left(\frac{1}{x \cdot x} + \left(\frac{3}{x} + \frac{3}{{x}^{3}}\right)\right)\\

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

\end{array}
double f(double x) {
        double r103187 = x;
        double r103188 = 1.0;
        double r103189 = r103187 + r103188;
        double r103190 = r103187 / r103189;
        double r103191 = r103187 - r103188;
        double r103192 = r103189 / r103191;
        double r103193 = r103190 - r103192;
        return r103193;
}

double f(double x) {
        double r103194 = x;
        double r103195 = -13119.887251887727;
        bool r103196 = r103194 <= r103195;
        double r103197 = 12089.166307002173;
        bool r103198 = r103194 <= r103197;
        double r103199 = !r103198;
        bool r103200 = r103196 || r103199;
        double r103201 = 1.0;
        double r103202 = r103194 * r103194;
        double r103203 = r103201 / r103202;
        double r103204 = 3.0;
        double r103205 = r103204 / r103194;
        double r103206 = 3.0;
        double r103207 = pow(r103194, r103206);
        double r103208 = r103204 / r103207;
        double r103209 = r103205 + r103208;
        double r103210 = r103203 + r103209;
        double r103211 = -r103210;
        double r103212 = r103194 + r103201;
        double r103213 = r103194 / r103212;
        double r103214 = r103201 + r103194;
        double r103215 = r103194 - r103201;
        double r103216 = r103214 / r103215;
        double r103217 = expm1(r103216);
        double r103218 = log1p(r103217);
        double r103219 = r103213 - r103218;
        double r103220 = r103200 ? r103211 : r103219;
        return r103220;
}

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 < -13119.887251887727 or 12089.166307002173 < x

    1. Initial program 59.2

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

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

      \[\leadsto \frac{x}{x + 1} - \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(\frac{1 + x}{x - 1}\right)\right)}\]
    5. 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)}\]
    6. Simplified0.0

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

    if -13119.887251887727 < x < 12089.166307002173

    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 log1p-expm1-u0.1

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -13119.88725188772696128580719232559204102 \lor \neg \left(x \le 12089.1663070021731982706114649772644043\right):\\ \;\;\;\;-\left(\frac{1}{x \cdot x} + \left(\frac{3}{x} + \frac{3}{{x}^{3}}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{x}{x + 1} - \mathsf{log1p}\left(\mathsf{expm1}\left(\frac{1 + x}{x - 1}\right)\right)\\ \end{array}\]

Reproduce

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