Average Error: 14.6 → 0.0
Time: 15.8s
Precision: 64
\[\frac{x}{x \cdot x + 1}\]
\[\begin{array}{l} \mathbf{if}\;x \le -7.683354923764348 \cdot 10^{+38}:\\ \;\;\;\;\frac{1}{x} + \left(\frac{1}{{x}^{5}} - \frac{\frac{1}{x}}{x \cdot x}\right)\\ \mathbf{elif}\;x \le 429.9995223081375:\\ \;\;\;\;\frac{x}{\mathsf{fma}\left(x, x, 1\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{x} + \left(\frac{1}{{x}^{5}} - \frac{\frac{1}{x}}{x \cdot x}\right)\\ \end{array}\]
\frac{x}{x \cdot x + 1}
\begin{array}{l}
\mathbf{if}\;x \le -7.683354923764348 \cdot 10^{+38}:\\
\;\;\;\;\frac{1}{x} + \left(\frac{1}{{x}^{5}} - \frac{\frac{1}{x}}{x \cdot x}\right)\\

\mathbf{elif}\;x \le 429.9995223081375:\\
\;\;\;\;\frac{x}{\mathsf{fma}\left(x, x, 1\right)}\\

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

\end{array}
double f(double x) {
        double r2244773 = x;
        double r2244774 = r2244773 * r2244773;
        double r2244775 = 1.0;
        double r2244776 = r2244774 + r2244775;
        double r2244777 = r2244773 / r2244776;
        return r2244777;
}

double f(double x) {
        double r2244778 = x;
        double r2244779 = -7.683354923764348e+38;
        bool r2244780 = r2244778 <= r2244779;
        double r2244781 = 1.0;
        double r2244782 = r2244781 / r2244778;
        double r2244783 = 5.0;
        double r2244784 = pow(r2244778, r2244783);
        double r2244785 = r2244781 / r2244784;
        double r2244786 = r2244778 * r2244778;
        double r2244787 = r2244782 / r2244786;
        double r2244788 = r2244785 - r2244787;
        double r2244789 = r2244782 + r2244788;
        double r2244790 = 429.9995223081375;
        bool r2244791 = r2244778 <= r2244790;
        double r2244792 = fma(r2244778, r2244778, r2244781);
        double r2244793 = r2244778 / r2244792;
        double r2244794 = r2244791 ? r2244793 : r2244789;
        double r2244795 = r2244780 ? r2244789 : r2244794;
        return r2244795;
}

Error

Bits error versus x

Target

Original14.6
Target0.1
Herbie0.0
\[\frac{1}{x + \frac{1}{x}}\]

Derivation

  1. Split input into 2 regimes
  2. if x < -7.683354923764348e+38 or 429.9995223081375 < x

    1. Initial program 31.7

      \[\frac{x}{x \cdot x + 1}\]
    2. Simplified31.7

      \[\leadsto \color{blue}{\frac{x}{\mathsf{fma}\left(x, x, 1\right)}}\]
    3. Using strategy rm
    4. Applied add-sqr-sqrt31.7

      \[\leadsto \frac{x}{\color{blue}{\sqrt{\mathsf{fma}\left(x, x, 1\right)} \cdot \sqrt{\mathsf{fma}\left(x, x, 1\right)}}}\]
    5. Applied *-un-lft-identity31.7

      \[\leadsto \frac{\color{blue}{1 \cdot x}}{\sqrt{\mathsf{fma}\left(x, x, 1\right)} \cdot \sqrt{\mathsf{fma}\left(x, x, 1\right)}}\]
    6. Applied times-frac31.6

      \[\leadsto \color{blue}{\frac{1}{\sqrt{\mathsf{fma}\left(x, x, 1\right)}} \cdot \frac{x}{\sqrt{\mathsf{fma}\left(x, x, 1\right)}}}\]
    7. Taylor expanded around inf 0.0

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

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

    if -7.683354923764348e+38 < x < 429.9995223081375

    1. Initial program 0.0

      \[\frac{x}{x \cdot x + 1}\]
    2. Simplified0.0

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -7.683354923764348 \cdot 10^{+38}:\\ \;\;\;\;\frac{1}{x} + \left(\frac{1}{{x}^{5}} - \frac{\frac{1}{x}}{x \cdot x}\right)\\ \mathbf{elif}\;x \le 429.9995223081375:\\ \;\;\;\;\frac{x}{\mathsf{fma}\left(x, x, 1\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{x} + \left(\frac{1}{{x}^{5}} - \frac{\frac{1}{x}}{x \cdot x}\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019164 +o rules:numerics
(FPCore (x)
  :name "x / (x^2 + 1)"

  :herbie-target
  (/ 1 (+ x (/ 1 x)))

  (/ x (+ (* x x) 1)))