x \cdot x - \left(y \cdot 4\right) \cdot \left(z \cdot z - t\right)
\begin{array}{l}
\mathbf{if}\;z \cdot z \le 1.521145199433776357765735930876915790283 \cdot 10^{298}:\\
\;\;\;\;\mathsf{fma}\left(x, x, \left(y \cdot 4\right) \cdot \left(t - z \cdot z\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(x, x, \left(\left(y \cdot 4\right) \cdot \left(\sqrt{t} + z\right)\right) \cdot \left(\sqrt{t} - z\right)\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r661570 = x;
double r661571 = r661570 * r661570;
double r661572 = y;
double r661573 = 4.0;
double r661574 = r661572 * r661573;
double r661575 = z;
double r661576 = r661575 * r661575;
double r661577 = t;
double r661578 = r661576 - r661577;
double r661579 = r661574 * r661578;
double r661580 = r661571 - r661579;
return r661580;
}
double f(double x, double y, double z, double t) {
double r661581 = z;
double r661582 = r661581 * r661581;
double r661583 = 1.5211451994337764e+298;
bool r661584 = r661582 <= r661583;
double r661585 = x;
double r661586 = y;
double r661587 = 4.0;
double r661588 = r661586 * r661587;
double r661589 = t;
double r661590 = r661589 - r661582;
double r661591 = r661588 * r661590;
double r661592 = fma(r661585, r661585, r661591);
double r661593 = sqrt(r661589);
double r661594 = r661593 + r661581;
double r661595 = r661588 * r661594;
double r661596 = r661593 - r661581;
double r661597 = r661595 * r661596;
double r661598 = fma(r661585, r661585, r661597);
double r661599 = r661584 ? r661592 : r661598;
return r661599;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 6.2 |
|---|---|
| Target | 6.2 |
| Herbie | 3.2 |
if (* z z) < 1.5211451994337764e+298Initial program 0.1
Simplified0.1
if 1.5211451994337764e+298 < (* z z) Initial program 60.7
Simplified60.7
rmApplied add-sqr-sqrt62.4
Applied difference-of-squares62.4
Applied associate-*r*31.3
Final simplification3.2
herbie shell --seed 2019353 +o rules:numerics
(FPCore (x y z t)
:name "Graphics.Rasterific.Shading:$sradialGradientWithFocusShader from Rasterific-0.6.1, B"
:precision binary64
:herbie-target
(- (* x x) (* 4 (* y (- (* z z) t))))
(- (* x x) (* (* y 4) (- (* z z) t))))