Average Error: 0.1 → 0.0
Time: 20.0s
Precision: 64
\[x \cdot x - \left(y \cdot 4\right) \cdot z\]
\[\mathsf{fma}\left(4 \cdot z, -y, {x}^{2}\right)\]
x \cdot x - \left(y \cdot 4\right) \cdot z
\mathsf{fma}\left(4 \cdot z, -y, {x}^{2}\right)
double f(double x, double y, double z) {
        double r123840 = x;
        double r123841 = r123840 * r123840;
        double r123842 = y;
        double r123843 = 4.0;
        double r123844 = r123842 * r123843;
        double r123845 = z;
        double r123846 = r123844 * r123845;
        double r123847 = r123841 - r123846;
        return r123847;
}

double f(double x, double y, double z) {
        double r123848 = 4.0;
        double r123849 = z;
        double r123850 = r123848 * r123849;
        double r123851 = y;
        double r123852 = -r123851;
        double r123853 = x;
        double r123854 = 2.0;
        double r123855 = pow(r123853, r123854);
        double r123856 = fma(r123850, r123852, r123855);
        return r123856;
}

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. Taylor expanded around 0 0.0

    \[\leadsto \color{blue}{{x}^{2} - 4 \cdot \left(z \cdot y\right)}\]
  3. Simplified0.0

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

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

Reproduce

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