Average Error: 29.4 → 0.2
Time: 13.4s
Precision: 64
\[\frac{x}{x + 1} - \frac{x + 1}{x - 1}\]
\[\begin{array}{l} \mathbf{if}\;\frac{x}{x + 1} - \frac{x + 1}{x - 1} \le 2.0571526871 \cdot 10^{-7}:\\ \;\;\;\;\left(-\frac{\frac{1}{x}}{x}\right) - \left(\frac{3}{x} + \frac{3}{{x}^{3}}\right)\\ \mathbf{else}:\\ \;\;\;\;\sqrt[3]{{\left(\frac{x}{x + 1} - \frac{x + 1}{x - 1}\right)}^{3}}\\ \end{array}\]
\frac{x}{x + 1} - \frac{x + 1}{x - 1}
\begin{array}{l}
\mathbf{if}\;\frac{x}{x + 1} - \frac{x + 1}{x - 1} \le 2.0571526871 \cdot 10^{-7}:\\
\;\;\;\;\left(-\frac{\frac{1}{x}}{x}\right) - \left(\frac{3}{x} + \frac{3}{{x}^{3}}\right)\\

\mathbf{else}:\\
\;\;\;\;\sqrt[3]{{\left(\frac{x}{x + 1} - \frac{x + 1}{x - 1}\right)}^{3}}\\

\end{array}
double f(double x) {
        double r166896 = x;
        double r166897 = 1.0;
        double r166898 = r166896 + r166897;
        double r166899 = r166896 / r166898;
        double r166900 = r166896 - r166897;
        double r166901 = r166898 / r166900;
        double r166902 = r166899 - r166901;
        return r166902;
}

double f(double x) {
        double r166903 = x;
        double r166904 = 1.0;
        double r166905 = r166903 + r166904;
        double r166906 = r166903 / r166905;
        double r166907 = r166903 - r166904;
        double r166908 = r166905 / r166907;
        double r166909 = r166906 - r166908;
        double r166910 = 2.057152687084951e-07;
        bool r166911 = r166909 <= r166910;
        double r166912 = r166904 / r166903;
        double r166913 = r166912 / r166903;
        double r166914 = -r166913;
        double r166915 = 3.0;
        double r166916 = r166915 / r166903;
        double r166917 = 3.0;
        double r166918 = pow(r166903, r166917);
        double r166919 = r166915 / r166918;
        double r166920 = r166916 + r166919;
        double r166921 = r166914 - r166920;
        double r166922 = pow(r166909, r166917);
        double r166923 = cbrt(r166922);
        double r166924 = r166911 ? r166921 : r166923;
        return r166924;
}

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 (+ x 1.0)) (/ (+ x 1.0) (- x 1.0))) < 2.057152687084951e-07

    1. Initial program 59.1

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

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

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

    if 2.057152687084951e-07 < (- (/ x (+ x 1.0)) (/ (+ x 1.0) (- x 1.0)))

    1. Initial program 0.1

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

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

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

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

Reproduce

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