Average Error: 28.9 → 0.4
Time: 26.6s
Precision: 64
\[\frac{x}{x + 1} - \frac{x + 1}{x - 1}\]
\[\begin{array}{l} \mathbf{if}\;x \le -0.9983730585657322187387308076722547411919:\\ \;\;\;\;-\left(\frac{3}{x} + \left(\frac{1}{x \cdot x} + \frac{3}{\left(x \cdot x\right) \cdot x}\right)\right)\\ \mathbf{elif}\;x \le 1.021370211112824000210252961551304906607:\\ \;\;\;\;\mathsf{fma}\left(3, x, \mathsf{fma}\left(x \cdot x, 1, 1\right)\right)\\ \mathbf{else}:\\ \;\;\;\;-\left(\frac{3}{x} + \left(\frac{1}{x \cdot x} + \frac{3}{\left(x \cdot x\right) \cdot x}\right)\right)\\ \end{array}\]
\frac{x}{x + 1} - \frac{x + 1}{x - 1}
\begin{array}{l}
\mathbf{if}\;x \le -0.9983730585657322187387308076722547411919:\\
\;\;\;\;-\left(\frac{3}{x} + \left(\frac{1}{x \cdot x} + \frac{3}{\left(x \cdot x\right) \cdot x}\right)\right)\\

\mathbf{elif}\;x \le 1.021370211112824000210252961551304906607:\\
\;\;\;\;\mathsf{fma}\left(3, x, \mathsf{fma}\left(x \cdot x, 1, 1\right)\right)\\

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

\end{array}
double f(double x) {
        double r4546788 = x;
        double r4546789 = 1.0;
        double r4546790 = r4546788 + r4546789;
        double r4546791 = r4546788 / r4546790;
        double r4546792 = r4546788 - r4546789;
        double r4546793 = r4546790 / r4546792;
        double r4546794 = r4546791 - r4546793;
        return r4546794;
}

double f(double x) {
        double r4546795 = x;
        double r4546796 = -0.9983730585657322;
        bool r4546797 = r4546795 <= r4546796;
        double r4546798 = 3.0;
        double r4546799 = r4546798 / r4546795;
        double r4546800 = 1.0;
        double r4546801 = r4546795 * r4546795;
        double r4546802 = r4546800 / r4546801;
        double r4546803 = r4546801 * r4546795;
        double r4546804 = r4546798 / r4546803;
        double r4546805 = r4546802 + r4546804;
        double r4546806 = r4546799 + r4546805;
        double r4546807 = -r4546806;
        double r4546808 = 1.021370211112824;
        bool r4546809 = r4546795 <= r4546808;
        double r4546810 = fma(r4546801, r4546800, r4546800);
        double r4546811 = fma(r4546798, r4546795, r4546810);
        double r4546812 = r4546809 ? r4546811 : r4546807;
        double r4546813 = r4546797 ? r4546807 : r4546812;
        return r4546813;
}

Error

Bits error versus x

Derivation

  1. Split input into 2 regimes
  2. if x < -0.9983730585657322 or 1.021370211112824 < x

    1. Initial program 58.6

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

      \[\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. Taylor expanded around inf 0.7

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

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

    if -0.9983730585657322 < x < 1.021370211112824

    1. Initial program 0.0

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

      \[\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. Taylor expanded around 0 0.5

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -0.9983730585657322187387308076722547411919:\\ \;\;\;\;-\left(\frac{3}{x} + \left(\frac{1}{x \cdot x} + \frac{3}{\left(x \cdot x\right) \cdot x}\right)\right)\\ \mathbf{elif}\;x \le 1.021370211112824000210252961551304906607:\\ \;\;\;\;\mathsf{fma}\left(3, x, \mathsf{fma}\left(x \cdot x, 1, 1\right)\right)\\ \mathbf{else}:\\ \;\;\;\;-\left(\frac{3}{x} + \left(\frac{1}{x \cdot x} + \frac{3}{\left(x \cdot x\right) \cdot x}\right)\right)\\ \end{array}\]

Reproduce

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