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.3832870677665486 \cdot 10^{291}:\\
\;\;\;\;\mathsf{fma}\left(x, x, \left(y \cdot 4\right) \cdot \left(t - z \cdot z\right) + \left(y \cdot 4\right) \cdot \mathsf{fma}\left(-z, z, 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 r655376 = x;
double r655377 = r655376 * r655376;
double r655378 = y;
double r655379 = 4.0;
double r655380 = r655378 * r655379;
double r655381 = z;
double r655382 = r655381 * r655381;
double r655383 = t;
double r655384 = r655382 - r655383;
double r655385 = r655380 * r655384;
double r655386 = r655377 - r655385;
return r655386;
}
double f(double x, double y, double z, double t) {
double r655387 = z;
double r655388 = r655387 * r655387;
double r655389 = 8.383287067766549e+291;
bool r655390 = r655388 <= r655389;
double r655391 = x;
double r655392 = y;
double r655393 = 4.0;
double r655394 = r655392 * r655393;
double r655395 = t;
double r655396 = r655395 - r655388;
double r655397 = r655394 * r655396;
double r655398 = -r655387;
double r655399 = fma(r655398, r655387, r655388);
double r655400 = r655394 * r655399;
double r655401 = r655397 + r655400;
double r655402 = fma(r655391, r655391, r655401);
double r655403 = sqrt(r655395);
double r655404 = r655403 + r655387;
double r655405 = r655394 * r655404;
double r655406 = r655403 - r655387;
double r655407 = r655405 * r655406;
double r655408 = fma(r655391, r655391, r655407);
double r655409 = r655390 ? r655402 : r655408;
return r655409;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 5.9 |
|---|---|
| Target | 5.9 |
| Herbie | 3.1 |
if (* z z) < 8.383287067766549e+291Initial program 0.1
Simplified0.1
rmApplied add-sqr-sqrt31.5
Applied prod-diff31.5
Applied distribute-lft-in31.5
Simplified0.1
if 8.383287067766549e+291 < (* z z) Initial program 58.1
Simplified58.1
rmApplied add-sqr-sqrt60.7
Applied difference-of-squares60.7
Applied associate-*r*30.7
Final simplification3.1
herbie shell --seed 2020033 +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))))