x \cdot x - \left(y \cdot 4\right) \cdot \left(z \cdot z - t\right)
\begin{array}{l}
\mathbf{if}\;z \cdot z \le 2.3243118769397114 \cdot 10^{304}:\\
\;\;\;\;x \cdot x - \left(y \cdot 4\right) \cdot \left(z \cdot z - t\right)\\
\mathbf{else}:\\
\;\;\;\;x \cdot x - \left(\left(y \cdot 4\right) \cdot \left(z + \sqrt{t}\right)\right) \cdot \left(z - \sqrt{t}\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r738635 = x;
double r738636 = r738635 * r738635;
double r738637 = y;
double r738638 = 4.0;
double r738639 = r738637 * r738638;
double r738640 = z;
double r738641 = r738640 * r738640;
double r738642 = t;
double r738643 = r738641 - r738642;
double r738644 = r738639 * r738643;
double r738645 = r738636 - r738644;
return r738645;
}
double f(double x, double y, double z, double t) {
double r738646 = z;
double r738647 = r738646 * r738646;
double r738648 = 2.3243118769397114e+304;
bool r738649 = r738647 <= r738648;
double r738650 = x;
double r738651 = r738650 * r738650;
double r738652 = y;
double r738653 = 4.0;
double r738654 = r738652 * r738653;
double r738655 = t;
double r738656 = r738647 - r738655;
double r738657 = r738654 * r738656;
double r738658 = r738651 - r738657;
double r738659 = sqrt(r738655);
double r738660 = r738646 + r738659;
double r738661 = r738654 * r738660;
double r738662 = r738646 - r738659;
double r738663 = r738661 * r738662;
double r738664 = r738651 - r738663;
double r738665 = r738649 ? r738658 : r738664;
return r738665;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 5.9 |
|---|---|
| Target | 5.9 |
| Herbie | 3.1 |
if (* z z) < 2.3243118769397114e+304Initial program 0.1
if 2.3243118769397114e+304 < (* z z) Initial program 62.9
rmApplied add-sqr-sqrt63.2
Applied difference-of-squares63.2
Applied associate-*r*32.4
Final simplification3.1
herbie shell --seed 2020065
(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))))