x \cdot x - \left(y \cdot 4\right) \cdot \left(z \cdot z - t\right)
\begin{array}{l}
\mathbf{if}\;z \cdot z \le 2.94628321762693042 \cdot 10^{297}:\\
\;\;\;\;\mathsf{fma}\left(x, x, \left(y \cdot 4\right) \cdot \left(t - z \cdot z\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(x, x, \left(\left(y \cdot 4\right) \cdot \left(\sqrt{t} + z\right)\right) \cdot \left(\sqrt{t} - z\right)\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r743456 = x;
double r743457 = r743456 * r743456;
double r743458 = y;
double r743459 = 4.0;
double r743460 = r743458 * r743459;
double r743461 = z;
double r743462 = r743461 * r743461;
double r743463 = t;
double r743464 = r743462 - r743463;
double r743465 = r743460 * r743464;
double r743466 = r743457 - r743465;
return r743466;
}
double f(double x, double y, double z, double t) {
double r743467 = z;
double r743468 = r743467 * r743467;
double r743469 = 2.9462832176269304e+297;
bool r743470 = r743468 <= r743469;
double r743471 = x;
double r743472 = y;
double r743473 = 4.0;
double r743474 = r743472 * r743473;
double r743475 = t;
double r743476 = r743475 - r743468;
double r743477 = r743474 * r743476;
double r743478 = fma(r743471, r743471, r743477);
double r743479 = sqrt(r743475);
double r743480 = r743479 + r743467;
double r743481 = r743474 * r743480;
double r743482 = r743479 - r743467;
double r743483 = r743481 * r743482;
double r743484 = fma(r743471, r743471, r743483);
double r743485 = r743470 ? r743478 : r743484;
return r743485;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 6.1 |
|---|---|
| Target | 6.1 |
| Herbie | 3.1 |
if (* z z) < 2.9462832176269304e+297Initial program 0.1
Simplified0.1
if 2.9462832176269304e+297 < (* z z) Initial program 59.8
Simplified59.8
rmApplied add-sqr-sqrt62.0
Applied difference-of-squares62.0
Applied associate-*r*29.8
Final simplification3.1
herbie shell --seed 2020024 +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))))