x \cdot x - \left(y \cdot 4\right) \cdot \left(z \cdot z - t\right)
\begin{array}{l}
\mathbf{if}\;z \cdot z \le 8.492390771886926299590046168507855606141 \cdot 10^{288}:\\
\;\;\;\;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 r401514 = x;
double r401515 = r401514 * r401514;
double r401516 = y;
double r401517 = 4.0;
double r401518 = r401516 * r401517;
double r401519 = z;
double r401520 = r401519 * r401519;
double r401521 = t;
double r401522 = r401520 - r401521;
double r401523 = r401518 * r401522;
double r401524 = r401515 - r401523;
return r401524;
}
double f(double x, double y, double z, double t) {
double r401525 = z;
double r401526 = r401525 * r401525;
double r401527 = 8.492390771886926e+288;
bool r401528 = r401526 <= r401527;
double r401529 = x;
double r401530 = r401529 * r401529;
double r401531 = y;
double r401532 = 4.0;
double r401533 = r401531 * r401532;
double r401534 = t;
double r401535 = r401526 - r401534;
double r401536 = r401533 * r401535;
double r401537 = r401530 - r401536;
double r401538 = sqrt(r401534);
double r401539 = r401525 + r401538;
double r401540 = r401533 * r401539;
double r401541 = r401525 - r401538;
double r401542 = r401540 * r401541;
double r401543 = r401530 - r401542;
double r401544 = r401528 ? r401537 : r401543;
return r401544;
}




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.3 |
if (* z z) < 8.492390771886926e+288Initial program 0.1
if 8.492390771886926e+288 < (* z z) Initial program 56.1
rmApplied add-sqr-sqrt59.7
Applied difference-of-squares59.7
Applied associate-*r*29.4
Final simplification3.3
herbie shell --seed 2019322
(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))))