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.94628321762693042 \cdot 10^{297}:\\
\;\;\;\;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 r679573 = x;
double r679574 = r679573 * r679573;
double r679575 = y;
double r679576 = 4.0;
double r679577 = r679575 * r679576;
double r679578 = z;
double r679579 = r679578 * r679578;
double r679580 = t;
double r679581 = r679579 - r679580;
double r679582 = r679577 * r679581;
double r679583 = r679574 - r679582;
return r679583;
}
double f(double x, double y, double z, double t) {
double r679584 = z;
double r679585 = r679584 * r679584;
double r679586 = 2.9462832176269304e+297;
bool r679587 = r679585 <= r679586;
double r679588 = x;
double r679589 = r679588 * r679588;
double r679590 = y;
double r679591 = 4.0;
double r679592 = r679590 * r679591;
double r679593 = t;
double r679594 = r679585 - r679593;
double r679595 = r679592 * r679594;
double r679596 = r679589 - r679595;
double r679597 = sqrt(r679593);
double r679598 = r679584 + r679597;
double r679599 = r679592 * r679598;
double r679600 = r679584 - r679597;
double r679601 = r679599 * r679600;
double r679602 = r679589 - r679601;
double r679603 = r679587 ? r679596 : r679602;
return r679603;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.1 |
|---|---|
| Target | 6.1 |
| Herbie | 3.1 |
if (* z z) < 2.9462832176269304e+297Initial program 0.1
if 2.9462832176269304e+297 < (* z z) Initial program 59.8
rmApplied add-sqr-sqrt62.0
Applied difference-of-squares62.0
Applied associate-*r*29.8
Final simplification3.1
herbie shell --seed 2020024
(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))))