Average Error: 14.9 → 0.0
Time: 1.0m
Precision: 64
\[\frac{x}{x \cdot x + 1}\]
\[\begin{array}{l} \mathbf{if}\;x \le -1.3266299825213365 \cdot 10^{+154}:\\ \;\;\;\;\left(\frac{1}{{x}^{5}} + \frac{1}{x}\right) - \frac{1}{\left(x \cdot x\right) \cdot x}\\ \mathbf{elif}\;x \le 458.4570297860489:\\ \;\;\;\;\frac{\frac{x}{\sqrt{(x \cdot x + 1)_*}}}{\sqrt{(x \cdot x + 1)_*}}\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{1}{{x}^{5}} + \frac{1}{x}\right) - \frac{1}{\left(x \cdot x\right) \cdot x}\\ \end{array}\]
double f(double x) {
        double r4927156 = x;
        double r4927157 = r4927156 * r4927156;
        double r4927158 = 1.0;
        double r4927159 = r4927157 + r4927158;
        double r4927160 = r4927156 / r4927159;
        return r4927160;
}

double f(double x) {
        double r4927161 = x;
        double r4927162 = -1.3266299825213365e+154;
        bool r4927163 = r4927161 <= r4927162;
        double r4927164 = 1.0;
        double r4927165 = 5.0;
        double r4927166 = pow(r4927161, r4927165);
        double r4927167 = r4927164 / r4927166;
        double r4927168 = r4927164 / r4927161;
        double r4927169 = r4927167 + r4927168;
        double r4927170 = r4927161 * r4927161;
        double r4927171 = r4927170 * r4927161;
        double r4927172 = r4927164 / r4927171;
        double r4927173 = r4927169 - r4927172;
        double r4927174 = 458.4570297860489;
        bool r4927175 = r4927161 <= r4927174;
        double r4927176 = fma(r4927161, r4927161, r4927164);
        double r4927177 = sqrt(r4927176);
        double r4927178 = r4927161 / r4927177;
        double r4927179 = r4927178 / r4927177;
        double r4927180 = r4927175 ? r4927179 : r4927173;
        double r4927181 = r4927163 ? r4927173 : r4927180;
        return r4927181;
}

\frac{x}{x \cdot x + 1}
\begin{array}{l}
\mathbf{if}\;x \le -1.3266299825213365 \cdot 10^{+154}:\\
\;\;\;\;\left(\frac{1}{{x}^{5}} + \frac{1}{x}\right) - \frac{1}{\left(x \cdot x\right) \cdot x}\\

\mathbf{elif}\;x \le 458.4570297860489:\\
\;\;\;\;\frac{\frac{x}{\sqrt{(x \cdot x + 1)_*}}}{\sqrt{(x \cdot x + 1)_*}}\\

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

\end{array}

Error

Bits error versus x

Target

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

Derivation

  1. Split input into 2 regimes
  2. if x < -1.3266299825213365e+154 or 458.4570297860489 < x

    1. Initial program 39.9

      \[\frac{x}{x \cdot x + 1}\]
    2. Simplified39.9

      \[\leadsto \color{blue}{\frac{x}{(x \cdot x + 1)_*}}\]
    3. Taylor expanded around inf 0.0

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

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

    if -1.3266299825213365e+154 < x < 458.4570297860489

    1. Initial program 0.1

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

      \[\leadsto \color{blue}{\frac{x}{(x \cdot x + 1)_*}}\]
    3. Using strategy rm
    4. Applied add-sqr-sqrt0.1

      \[\leadsto \frac{x}{\color{blue}{\sqrt{(x \cdot x + 1)_*} \cdot \sqrt{(x \cdot x + 1)_*}}}\]
    5. Applied associate-/r*0.0

      \[\leadsto \color{blue}{\frac{\frac{x}{\sqrt{(x \cdot x + 1)_*}}}{\sqrt{(x \cdot x + 1)_*}}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.0

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -1.3266299825213365 \cdot 10^{+154}:\\ \;\;\;\;\left(\frac{1}{{x}^{5}} + \frac{1}{x}\right) - \frac{1}{\left(x \cdot x\right) \cdot x}\\ \mathbf{elif}\;x \le 458.4570297860489:\\ \;\;\;\;\frac{\frac{x}{\sqrt{(x \cdot x + 1)_*}}}{\sqrt{(x \cdot x + 1)_*}}\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{1}{{x}^{5}} + \frac{1}{x}\right) - \frac{1}{\left(x \cdot x\right) \cdot x}\\ \end{array}\]

Reproduce

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

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

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