Average Error: 0.1 → 0.0
Time: 1.8s
Precision: 64
\[x \cdot x - \left(y \cdot 4\right) \cdot z\]
\[\mathsf{fma}\left(z \cdot \left(-4\right), y, x \cdot x\right)\]
x \cdot x - \left(y \cdot 4\right) \cdot z
\mathsf{fma}\left(z \cdot \left(-4\right), y, x \cdot x\right)
double f(double x, double y, double z) {
        double r127086 = x;
        double r127087 = r127086 * r127086;
        double r127088 = y;
        double r127089 = 4.0;
        double r127090 = r127088 * r127089;
        double r127091 = z;
        double r127092 = r127090 * r127091;
        double r127093 = r127087 - r127092;
        return r127093;
}

double f(double x, double y, double z) {
        double r127094 = z;
        double r127095 = 4.0;
        double r127096 = -r127095;
        double r127097 = r127094 * r127096;
        double r127098 = y;
        double r127099 = x;
        double r127100 = r127099 * r127099;
        double r127101 = fma(r127097, r127098, r127100);
        return r127101;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Derivation

  1. Initial program 0.1

    \[x \cdot x - \left(y \cdot 4\right) \cdot z\]
  2. Simplified0.0

    \[\leadsto \color{blue}{\mathsf{fma}\left(z \cdot \left(-4\right), y, x \cdot x\right)}\]
  3. Final simplification0.0

    \[\leadsto \mathsf{fma}\left(z \cdot \left(-4\right), y, x \cdot x\right)\]

Reproduce

herbie shell --seed 2019196 +o rules:numerics
(FPCore (x y z)
  :name "Graphics.Rasterific.QuadraticFormula:discriminant from Rasterific-0.6.1"
  (- (* x x) (* (* y 4.0) z)))