Average Error: 38.8 → 0
Time: 6.0s
Precision: 64
\[\left(x + 1\right) \cdot \left(x + 1\right) - 1\]
\[\mathsf{fma}\left(x, x, x \cdot 2\right)\]
\left(x + 1\right) \cdot \left(x + 1\right) - 1
\mathsf{fma}\left(x, x, x \cdot 2\right)
double f(double x) {
        double r281524 = x;
        double r281525 = 1.0;
        double r281526 = r281524 + r281525;
        double r281527 = r281526 * r281526;
        double r281528 = r281527 - r281525;
        return r281528;
}

double f(double x) {
        double r281529 = x;
        double r281530 = 2.0;
        double r281531 = r281529 * r281530;
        double r281532 = fma(r281529, r281529, r281531);
        return r281532;
}

Error

Bits error versus x

Derivation

  1. Initial program 38.8

    \[\left(x + 1\right) \cdot \left(x + 1\right) - 1\]
  2. Taylor expanded around 0 0.0

    \[\leadsto \color{blue}{2 \cdot x + {x}^{2}}\]
  3. Simplified0

    \[\leadsto \color{blue}{\mathsf{fma}\left(x, x, 2 \cdot x\right)}\]
  4. Final simplification0

    \[\leadsto \mathsf{fma}\left(x, x, x \cdot 2\right)\]

Reproduce

herbie shell --seed 2019169 +o rules:numerics
(FPCore (x)
  :name "Expanding a square"
  (- (* (+ x 1.0) (+ x 1.0)) 1.0))