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.521145199433776357765735930876915790283 \cdot 10^{298}:\\
\;\;\;\;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 r923389 = x;
double r923390 = r923389 * r923389;
double r923391 = y;
double r923392 = 4.0;
double r923393 = r923391 * r923392;
double r923394 = z;
double r923395 = r923394 * r923394;
double r923396 = t;
double r923397 = r923395 - r923396;
double r923398 = r923393 * r923397;
double r923399 = r923390 - r923398;
return r923399;
}
double f(double x, double y, double z, double t) {
double r923400 = z;
double r923401 = r923400 * r923400;
double r923402 = 1.5211451994337764e+298;
bool r923403 = r923401 <= r923402;
double r923404 = x;
double r923405 = r923404 * r923404;
double r923406 = y;
double r923407 = 4.0;
double r923408 = r923406 * r923407;
double r923409 = t;
double r923410 = r923401 - r923409;
double r923411 = r923408 * r923410;
double r923412 = r923405 - r923411;
double r923413 = sqrt(r923409);
double r923414 = r923400 + r923413;
double r923415 = r923408 * r923414;
double r923416 = r923400 - r923413;
double r923417 = r923415 * r923416;
double r923418 = r923405 - r923417;
double r923419 = r923403 ? r923412 : r923418;
return r923419;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.2 |
|---|---|
| Target | 6.2 |
| Herbie | 3.2 |
if (* z z) < 1.5211451994337764e+298Initial program 0.1
if 1.5211451994337764e+298 < (* z z) Initial program 60.7
rmApplied add-sqr-sqrt62.4
Applied difference-of-squares62.4
Applied associate-*r*31.3
Final simplification3.2
herbie shell --seed 2019353
(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))))