Average Error: 6.0 → 3.1
Time: 1.0m
Precision: 64
\[x \cdot x - \left(y \cdot 4.0\right) \cdot \left(z \cdot z - t\right)\]
\[\begin{array}{l} \mathbf{if}\;z \cdot z \le 5.86519200437255 \cdot 10^{+302}:\\ \;\;\;\;\mathsf{fma}\left(x, x, \left(\left(-4.0\right) \cdot y\right) \cdot \left(z \cdot z - t\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(x, x, \left(z - \sqrt{t}\right) \cdot \left(\left(\sqrt{t} + z\right) \cdot \left(\left(-4.0\right) \cdot y\right)\right)\right)\\ \end{array}\]
x \cdot x - \left(y \cdot 4.0\right) \cdot \left(z \cdot z - t\right)
\begin{array}{l}
\mathbf{if}\;z \cdot z \le 5.86519200437255 \cdot 10^{+302}:\\
\;\;\;\;\mathsf{fma}\left(x, x, \left(\left(-4.0\right) \cdot y\right) \cdot \left(z \cdot z - t\right)\right)\\

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(x, x, \left(z - \sqrt{t}\right) \cdot \left(\left(\sqrt{t} + z\right) \cdot \left(\left(-4.0\right) \cdot y\right)\right)\right)\\

\end{array}
double f(double x, double y, double z, double t) {
        double r29558449 = x;
        double r29558450 = r29558449 * r29558449;
        double r29558451 = y;
        double r29558452 = 4.0;
        double r29558453 = r29558451 * r29558452;
        double r29558454 = z;
        double r29558455 = r29558454 * r29558454;
        double r29558456 = t;
        double r29558457 = r29558455 - r29558456;
        double r29558458 = r29558453 * r29558457;
        double r29558459 = r29558450 - r29558458;
        return r29558459;
}

double f(double x, double y, double z, double t) {
        double r29558460 = z;
        double r29558461 = r29558460 * r29558460;
        double r29558462 = 5.86519200437255e+302;
        bool r29558463 = r29558461 <= r29558462;
        double r29558464 = x;
        double r29558465 = 4.0;
        double r29558466 = -r29558465;
        double r29558467 = y;
        double r29558468 = r29558466 * r29558467;
        double r29558469 = t;
        double r29558470 = r29558461 - r29558469;
        double r29558471 = r29558468 * r29558470;
        double r29558472 = fma(r29558464, r29558464, r29558471);
        double r29558473 = sqrt(r29558469);
        double r29558474 = r29558460 - r29558473;
        double r29558475 = r29558473 + r29558460;
        double r29558476 = r29558475 * r29558468;
        double r29558477 = r29558474 * r29558476;
        double r29558478 = fma(r29558464, r29558464, r29558477);
        double r29558479 = r29558463 ? r29558472 : r29558478;
        return r29558479;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Target

Original6.0
Target6.0
Herbie3.1
\[x \cdot x - 4.0 \cdot \left(y \cdot \left(z \cdot z - t\right)\right)\]

Derivation

  1. Split input into 2 regimes
  2. if (* z z) < 5.86519200437255e+302

    1. Initial program 0.1

      \[x \cdot x - \left(y \cdot 4.0\right) \cdot \left(z \cdot z - t\right)\]
    2. Using strategy rm
    3. Applied fma-neg0.1

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

    if 5.86519200437255e+302 < (* z z)

    1. Initial program 61.8

      \[x \cdot x - \left(y \cdot 4.0\right) \cdot \left(z \cdot z - t\right)\]
    2. Using strategy rm
    3. Applied fma-neg61.8

      \[\leadsto \color{blue}{\mathsf{fma}\left(x, x, -\left(y \cdot 4.0\right) \cdot \left(z \cdot z - t\right)\right)}\]
    4. Using strategy rm
    5. Applied add-sqr-sqrt63.0

      \[\leadsto \mathsf{fma}\left(x, x, -\left(y \cdot 4.0\right) \cdot \left(z \cdot z - \color{blue}{\sqrt{t} \cdot \sqrt{t}}\right)\right)\]
    6. Applied difference-of-squares63.0

      \[\leadsto \mathsf{fma}\left(x, x, -\left(y \cdot 4.0\right) \cdot \color{blue}{\left(\left(z + \sqrt{t}\right) \cdot \left(z - \sqrt{t}\right)\right)}\right)\]
    7. Applied associate-*r*31.2

      \[\leadsto \mathsf{fma}\left(x, x, -\color{blue}{\left(\left(y \cdot 4.0\right) \cdot \left(z + \sqrt{t}\right)\right) \cdot \left(z - \sqrt{t}\right)}\right)\]
  3. Recombined 2 regimes into one program.
  4. Final simplification3.1

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \cdot z \le 5.86519200437255 \cdot 10^{+302}:\\ \;\;\;\;\mathsf{fma}\left(x, x, \left(\left(-4.0\right) \cdot y\right) \cdot \left(z \cdot z - t\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(x, x, \left(z - \sqrt{t}\right) \cdot \left(\left(\sqrt{t} + z\right) \cdot \left(\left(-4.0\right) \cdot y\right)\right)\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019165 +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))))