Average Error: 14.2 → 0.0
Time: 24.8s
Precision: 64
\[\frac{1}{x + 1} - \frac{1}{x - 1}\]
\[\begin{array}{l} \mathbf{if}\;x \le -217.48840301719764 \lor \neg \left(x \le 211.000747456426012\right):\\ \;\;\;\;\frac{-2}{{x}^{6}} - \mathsf{fma}\left(2, {x}^{\left(-2\right)}, 2 \cdot \frac{1}{{x}^{4}}\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{1}{x \cdot x - 1 \cdot 1}, x - 1, -\frac{1}{x - 1}\right)\\ \end{array}\]
\frac{1}{x + 1} - \frac{1}{x - 1}
\begin{array}{l}
\mathbf{if}\;x \le -217.48840301719764 \lor \neg \left(x \le 211.000747456426012\right):\\
\;\;\;\;\frac{-2}{{x}^{6}} - \mathsf{fma}\left(2, {x}^{\left(-2\right)}, 2 \cdot \frac{1}{{x}^{4}}\right)\\

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{x \cdot x - 1 \cdot 1}, x - 1, -\frac{1}{x - 1}\right)\\

\end{array}
double f(double x) {
        double r230012 = 1.0;
        double r230013 = x;
        double r230014 = r230013 + r230012;
        double r230015 = r230012 / r230014;
        double r230016 = r230013 - r230012;
        double r230017 = r230012 / r230016;
        double r230018 = r230015 - r230017;
        return r230018;
}

double f(double x) {
        double r230019 = x;
        double r230020 = -217.48840301719764;
        bool r230021 = r230019 <= r230020;
        double r230022 = 211.000747456426;
        bool r230023 = r230019 <= r230022;
        double r230024 = !r230023;
        bool r230025 = r230021 || r230024;
        double r230026 = 2.0;
        double r230027 = -r230026;
        double r230028 = 6.0;
        double r230029 = pow(r230019, r230028);
        double r230030 = r230027 / r230029;
        double r230031 = 2.0;
        double r230032 = -r230031;
        double r230033 = pow(r230019, r230032);
        double r230034 = 1.0;
        double r230035 = 4.0;
        double r230036 = pow(r230019, r230035);
        double r230037 = r230034 / r230036;
        double r230038 = r230026 * r230037;
        double r230039 = fma(r230026, r230033, r230038);
        double r230040 = r230030 - r230039;
        double r230041 = 1.0;
        double r230042 = r230019 * r230019;
        double r230043 = r230041 * r230041;
        double r230044 = r230042 - r230043;
        double r230045 = r230041 / r230044;
        double r230046 = r230019 - r230041;
        double r230047 = r230041 / r230046;
        double r230048 = -r230047;
        double r230049 = fma(r230045, r230046, r230048);
        double r230050 = r230025 ? r230040 : r230049;
        return r230050;
}

Error

Bits error versus x

Derivation

  1. Split input into 2 regimes
  2. if x < -217.48840301719764 or 211.000747456426 < x

    1. Initial program 28.4

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

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

      \[\leadsto \color{blue}{\frac{-2}{{x}^{6}} - \mathsf{fma}\left(2, \frac{1}{{x}^{2}}, 2 \cdot \frac{1}{{x}^{4}}\right)}\]
    4. Using strategy rm
    5. Applied pow-flip0.0

      \[\leadsto \frac{-2}{{x}^{6}} - \mathsf{fma}\left(2, \color{blue}{{x}^{\left(-2\right)}}, 2 \cdot \frac{1}{{x}^{4}}\right)\]

    if -217.48840301719764 < x < 211.000747456426

    1. Initial program 0.0

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

      \[\leadsto \frac{1}{\color{blue}{\frac{x \cdot x - 1 \cdot 1}{x - 1}}} - \frac{1}{x - 1}\]
    4. Applied associate-/r/0.0

      \[\leadsto \color{blue}{\frac{1}{x \cdot x - 1 \cdot 1} \cdot \left(x - 1\right)} - \frac{1}{x - 1}\]
    5. Applied fma-neg0.0

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -217.48840301719764 \lor \neg \left(x \le 211.000747456426012\right):\\ \;\;\;\;\frac{-2}{{x}^{6}} - \mathsf{fma}\left(2, {x}^{\left(-2\right)}, 2 \cdot \frac{1}{{x}^{4}}\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{1}{x \cdot x - 1 \cdot 1}, x - 1, -\frac{1}{x - 1}\right)\\ \end{array}\]

Reproduce

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