Average Error: 0.1 → 0.1
Time: 865.0ms
Precision: 64
\[x \cdot x - \left(y \cdot 4\right) \cdot z\]
\[\mathsf{fma}\left(x, x, -\left(y \cdot 4\right) \cdot z\right)\]
x \cdot x - \left(y \cdot 4\right) \cdot z
\mathsf{fma}\left(x, x, -\left(y \cdot 4\right) \cdot z\right)
double f(double x, double y, double z) {
        double r168802 = x;
        double r168803 = r168802 * r168802;
        double r168804 = y;
        double r168805 = 4.0;
        double r168806 = r168804 * r168805;
        double r168807 = z;
        double r168808 = r168806 * r168807;
        double r168809 = r168803 - r168808;
        return r168809;
}

double f(double x, double y, double z) {
        double r168810 = x;
        double r168811 = y;
        double r168812 = 4.0;
        double r168813 = r168811 * r168812;
        double r168814 = z;
        double r168815 = r168813 * r168814;
        double r168816 = -r168815;
        double r168817 = fma(r168810, r168810, r168816);
        return r168817;
}

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. Using strategy rm
  3. Applied fma-neg0.1

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

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

Reproduce

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