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.434062985694346791901718650963140330261 \cdot 10^{307}:\\
\;\;\;\;x \cdot x - \left(y \cdot 4\right) \cdot \left(z \cdot z - t\right)\\
\mathbf{else}:\\
\;\;\;\;x \cdot x - \left(\left(z + \sqrt{t}\right) \cdot \left(y \cdot 4\right)\right) \cdot \left(z - \sqrt{t}\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r497849 = x;
double r497850 = r497849 * r497849;
double r497851 = y;
double r497852 = 4.0;
double r497853 = r497851 * r497852;
double r497854 = z;
double r497855 = r497854 * r497854;
double r497856 = t;
double r497857 = r497855 - r497856;
double r497858 = r497853 * r497857;
double r497859 = r497850 - r497858;
return r497859;
}
double f(double x, double y, double z, double t) {
double r497860 = z;
double r497861 = r497860 * r497860;
double r497862 = 1.4340629856943468e+307;
bool r497863 = r497861 <= r497862;
double r497864 = x;
double r497865 = r497864 * r497864;
double r497866 = y;
double r497867 = 4.0;
double r497868 = r497866 * r497867;
double r497869 = t;
double r497870 = r497861 - r497869;
double r497871 = r497868 * r497870;
double r497872 = r497865 - r497871;
double r497873 = sqrt(r497869);
double r497874 = r497860 + r497873;
double r497875 = r497874 * r497868;
double r497876 = r497860 - r497873;
double r497877 = r497875 * r497876;
double r497878 = r497865 - r497877;
double r497879 = r497863 ? r497872 : r497878;
return r497879;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 5.6 |
|---|---|
| Target | 5.6 |
| Herbie | 2.9 |
if (* z z) < 1.4340629856943468e+307Initial program 0.1
if 1.4340629856943468e+307 < (* z z) Initial program 63.7
rmApplied add-sqr-sqrt63.8
Applied difference-of-squares63.8
Applied associate-*r*31.9
Simplified31.9
Final simplification2.9
herbie shell --seed 2019209
(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))))