x \cdot x - \left(y \cdot 4\right) \cdot \left(z \cdot z - t\right)
\begin{array}{l}
\mathbf{if}\;z \cdot z \le 4.012940309661976867141675654509420293463 \cdot 10^{304}:\\
\;\;\;\;\mathsf{fma}\left(x, x, \left(-\left(z \cdot z - t\right)\right) \cdot \left(y \cdot 4\right)\right) - \left(y \cdot 4\right) \cdot \mathsf{fma}\left(-t, 1, t\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(x, x, \left(-\left(z + \sqrt{t}\right)\right) \cdot \left(\left(z - \sqrt{t}\right) \cdot \left(y \cdot 4\right)\right)\right) - \left(y \cdot 4\right) \cdot \mathsf{fma}\left(-t, 1, t\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r338917 = x;
double r338918 = r338917 * r338917;
double r338919 = y;
double r338920 = 4.0;
double r338921 = r338919 * r338920;
double r338922 = z;
double r338923 = r338922 * r338922;
double r338924 = t;
double r338925 = r338923 - r338924;
double r338926 = r338921 * r338925;
double r338927 = r338918 - r338926;
return r338927;
}
double f(double x, double y, double z, double t) {
double r338928 = z;
double r338929 = r338928 * r338928;
double r338930 = 4.012940309661977e+304;
bool r338931 = r338929 <= r338930;
double r338932 = x;
double r338933 = t;
double r338934 = r338929 - r338933;
double r338935 = -r338934;
double r338936 = y;
double r338937 = 4.0;
double r338938 = r338936 * r338937;
double r338939 = r338935 * r338938;
double r338940 = fma(r338932, r338932, r338939);
double r338941 = -r338933;
double r338942 = 1.0;
double r338943 = fma(r338941, r338942, r338933);
double r338944 = r338938 * r338943;
double r338945 = r338940 - r338944;
double r338946 = sqrt(r338933);
double r338947 = r338928 + r338946;
double r338948 = -r338947;
double r338949 = r338928 - r338946;
double r338950 = r338949 * r338938;
double r338951 = r338948 * r338950;
double r338952 = fma(r338932, r338932, r338951);
double r338953 = r338952 - r338944;
double r338954 = r338931 ? r338945 : r338953;
return r338954;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 5.9 |
|---|---|
| Target | 5.9 |
| Herbie | 3.3 |
if (* z z) < 4.012940309661977e+304Initial program 0.1
rmApplied *-un-lft-identity0.1
Applied prod-diff0.1
Applied distribute-rgt-in0.1
Applied associate--r+0.1
Simplified0.1
if 4.012940309661977e+304 < (* z z) Initial program 62.5
rmApplied *-un-lft-identity62.5
Applied prod-diff62.5
Applied distribute-rgt-in62.5
Applied associate--r+62.5
Simplified62.5
rmApplied add-sqr-sqrt63.4
Applied difference-of-squares63.4
Applied distribute-lft-neg-in63.4
Applied associate-*l*34.3
Final simplification3.3
herbie shell --seed 2019212 +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))))