Average Error: 0.0 → 0
Time: 3.2s
Precision: 64
\[x - y \cdot y\]
\[\mathsf{fma}\left(y, -y, x\right)\]
x - y \cdot y
\mathsf{fma}\left(y, -y, x\right)
double f(double x, double y) {
        double r171780 = x;
        double r171781 = y;
        double r171782 = r171781 * r171781;
        double r171783 = r171780 - r171782;
        return r171783;
}

double f(double x, double y) {
        double r171784 = y;
        double r171785 = -r171784;
        double r171786 = x;
        double r171787 = fma(r171784, r171785, r171786);
        return r171787;
}

Error

Bits error versus x

Bits error versus y

Derivation

  1. Initial program 0.0

    \[x - y \cdot y\]
  2. Taylor expanded around 0 0.0

    \[\leadsto \color{blue}{x - {y}^{2}}\]
  3. Simplified0

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

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

Reproduce

herbie shell --seed 2019351 +o rules:numerics
(FPCore (x y)
  :name "Graphics.Rasterific.Shading:$sradialGradientWithFocusShader from Rasterific-0.6.1"
  :precision binary64
  (- x (* y y)))