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.090511535234420829903305418329171804458 \cdot 10^{305}:\\
\;\;\;\;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 r543424 = x;
double r543425 = r543424 * r543424;
double r543426 = y;
double r543427 = 4.0;
double r543428 = r543426 * r543427;
double r543429 = z;
double r543430 = r543429 * r543429;
double r543431 = t;
double r543432 = r543430 - r543431;
double r543433 = r543428 * r543432;
double r543434 = r543425 - r543433;
return r543434;
}
double f(double x, double y, double z, double t) {
double r543435 = z;
double r543436 = r543435 * r543435;
double r543437 = 1.0905115352344208e+305;
bool r543438 = r543436 <= r543437;
double r543439 = x;
double r543440 = r543439 * r543439;
double r543441 = y;
double r543442 = 4.0;
double r543443 = r543441 * r543442;
double r543444 = t;
double r543445 = r543436 - r543444;
double r543446 = r543443 * r543445;
double r543447 = r543440 - r543446;
double r543448 = sqrt(r543444);
double r543449 = r543435 + r543448;
double r543450 = r543443 * r543449;
double r543451 = r543435 - r543448;
double r543452 = r543450 * r543451;
double r543453 = r543440 - r543452;
double r543454 = r543438 ? r543447 : r543453;
return r543454;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 5.9 |
|---|---|
| Target | 5.9 |
| Herbie | 3.1 |
if (* z z) < 1.0905115352344208e+305Initial program 0.1
if 1.0905115352344208e+305 < (* z z) Initial program 62.8
rmApplied add-sqr-sqrt63.4
Applied difference-of-squares63.4
Applied associate-*r*32.3
Final simplification3.1
herbie shell --seed 2019350
(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))))