Average Error: 15.1 → 0.1
Time: 29.4s
Precision: 64
\[\frac{x}{x \cdot x + 1.0}\]
\[\frac{1}{\frac{1.0}{x} + x}\]
\frac{x}{x \cdot x + 1.0}
\frac{1}{\frac{1.0}{x} + x}
double f(double x) {
        double r2523347 = x;
        double r2523348 = r2523347 * r2523347;
        double r2523349 = 1.0;
        double r2523350 = r2523348 + r2523349;
        double r2523351 = r2523347 / r2523350;
        return r2523351;
}

double f(double x) {
        double r2523352 = 1.0;
        double r2523353 = 1.0;
        double r2523354 = x;
        double r2523355 = r2523353 / r2523354;
        double r2523356 = r2523355 + r2523354;
        double r2523357 = r2523352 / r2523356;
        return r2523357;
}

Error

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original15.1
Target0.1
Herbie0.1
\[\frac{1.0}{x + \frac{1.0}{x}}\]

Derivation

  1. Initial program 15.1

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

    \[\leadsto \color{blue}{\frac{x}{\mathsf{fma}\left(x, x, 1.0\right)}}\]
  3. Using strategy rm
  4. Applied clear-num15.1

    \[\leadsto \color{blue}{\frac{1}{\frac{\mathsf{fma}\left(x, x, 1.0\right)}{x}}}\]
  5. Taylor expanded around 0 0.1

    \[\leadsto \frac{1}{\color{blue}{x + 1.0 \cdot \frac{1}{x}}}\]
  6. Simplified0.1

    \[\leadsto \frac{1}{\color{blue}{\frac{1.0}{x} + x}}\]
  7. Final simplification0.1

    \[\leadsto \frac{1}{\frac{1.0}{x} + x}\]

Reproduce

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

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

  (/ x (+ (* x x) 1.0)))