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.33207297841188052 \cdot 10^{300}:\\
\;\;\;\;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 r785329 = x;
double r785330 = r785329 * r785329;
double r785331 = y;
double r785332 = 4.0;
double r785333 = r785331 * r785332;
double r785334 = z;
double r785335 = r785334 * r785334;
double r785336 = t;
double r785337 = r785335 - r785336;
double r785338 = r785333 * r785337;
double r785339 = r785330 - r785338;
return r785339;
}
double f(double x, double y, double z, double t) {
double r785340 = z;
double r785341 = r785340 * r785340;
double r785342 = 1.3320729784118805e+300;
bool r785343 = r785341 <= r785342;
double r785344 = x;
double r785345 = r785344 * r785344;
double r785346 = y;
double r785347 = 4.0;
double r785348 = r785346 * r785347;
double r785349 = t;
double r785350 = r785341 - r785349;
double r785351 = r785348 * r785350;
double r785352 = r785345 - r785351;
double r785353 = sqrt(r785349);
double r785354 = r785340 + r785353;
double r785355 = r785348 * r785354;
double r785356 = r785340 - r785353;
double r785357 = r785355 * r785356;
double r785358 = r785345 - r785357;
double r785359 = r785343 ? r785352 : r785358;
return r785359;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.0 |
|---|---|
| Target | 6.0 |
| Herbie | 3.1 |
if (* z z) < 1.3320729784118805e+300Initial program 0.1
if 1.3320729784118805e+300 < (* z z) Initial program 61.2
rmApplied add-sqr-sqrt62.7
Applied difference-of-squares62.7
Applied associate-*r*31.7
Final simplification3.1
herbie shell --seed 2020089
(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))))