x \cdot x - \left(y \cdot 4\right) \cdot \left(z \cdot z - t\right)
\begin{array}{l}
\mathbf{if}\;z \cdot z \le 5.6499424326614904 \cdot 10^{293}:\\
\;\;\;\;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 r882216 = x;
double r882217 = r882216 * r882216;
double r882218 = y;
double r882219 = 4.0;
double r882220 = r882218 * r882219;
double r882221 = z;
double r882222 = r882221 * r882221;
double r882223 = t;
double r882224 = r882222 - r882223;
double r882225 = r882220 * r882224;
double r882226 = r882217 - r882225;
return r882226;
}
double f(double x, double y, double z, double t) {
double r882227 = z;
double r882228 = r882227 * r882227;
double r882229 = 5.6499424326614904e+293;
bool r882230 = r882228 <= r882229;
double r882231 = x;
double r882232 = r882231 * r882231;
double r882233 = y;
double r882234 = 4.0;
double r882235 = r882233 * r882234;
double r882236 = t;
double r882237 = r882228 - r882236;
double r882238 = r882235 * r882237;
double r882239 = r882232 - r882238;
double r882240 = sqrt(r882236);
double r882241 = r882227 + r882240;
double r882242 = r882235 * r882241;
double r882243 = r882227 - r882240;
double r882244 = r882242 * r882243;
double r882245 = r882232 - r882244;
double r882246 = r882230 ? r882239 : r882245;
return r882246;
}




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.3 |
if (* z z) < 5.6499424326614904e+293Initial program 0.1
if 5.6499424326614904e+293 < (* z z) Initial program 59.7
rmApplied add-sqr-sqrt62.0
Applied difference-of-squares62.0
Applied associate-*r*31.7
Final simplification3.3
herbie shell --seed 2020025 +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))))