Average Error: 5.3 → 5.3
Time: 14.5s
Precision: 64
\[x \cdot x - \left(y \cdot 4.0\right) \cdot \left(z \cdot z - t\right)\]
\[\mathsf{fma}\left(y \cdot 4.0, t - z \cdot z, x \cdot x\right)\]
x \cdot x - \left(y \cdot 4.0\right) \cdot \left(z \cdot z - t\right)
\mathsf{fma}\left(y \cdot 4.0, t - z \cdot z, x \cdot x\right)
double f(double x, double y, double z, double t) {
        double r11968304 = x;
        double r11968305 = r11968304 * r11968304;
        double r11968306 = y;
        double r11968307 = 4.0;
        double r11968308 = r11968306 * r11968307;
        double r11968309 = z;
        double r11968310 = r11968309 * r11968309;
        double r11968311 = t;
        double r11968312 = r11968310 - r11968311;
        double r11968313 = r11968308 * r11968312;
        double r11968314 = r11968305 - r11968313;
        return r11968314;
}

double f(double x, double y, double z, double t) {
        double r11968315 = y;
        double r11968316 = 4.0;
        double r11968317 = r11968315 * r11968316;
        double r11968318 = t;
        double r11968319 = z;
        double r11968320 = r11968319 * r11968319;
        double r11968321 = r11968318 - r11968320;
        double r11968322 = x;
        double r11968323 = r11968322 * r11968322;
        double r11968324 = fma(r11968317, r11968321, r11968323);
        return r11968324;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Target

Original5.3
Target5.2
Herbie5.3
\[x \cdot x - 4.0 \cdot \left(y \cdot \left(z \cdot z - t\right)\right)\]

Derivation

  1. Initial program 5.3

    \[x \cdot x - \left(y \cdot 4.0\right) \cdot \left(z \cdot z - t\right)\]
  2. Simplified5.3

    \[\leadsto \color{blue}{\mathsf{fma}\left(y \cdot 4.0, t - z \cdot z, x \cdot x\right)}\]
  3. Final simplification5.3

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

Reproduce

herbie shell --seed 2019156 +o rules:numerics
(FPCore (x y z t)
  :name "Graphics.Rasterific.Shading:$sradialGradientWithFocusShader from Rasterific-0.6.1, B"

  :herbie-target
  (- (* x x) (* 4.0 (* y (- (* z z) t))))

  (- (* x x) (* (* y 4.0) (- (* z z) t))))