x \cdot x - \left(y \cdot 4\right) \cdot \left(z \cdot z - t\right)
\begin{array}{l}
\mathbf{if}\;z \cdot z \le 6.12322392683654523 \cdot 10^{304}:\\
\;\;\;\;\mathsf{fma}\left(4, y \cdot \left(t - z \cdot z\right), x \cdot x\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(4, \left(y \cdot \left(\sqrt{t} + z\right)\right) \cdot \left(\sqrt{t} - z\right), x \cdot x\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r720134 = x;
double r720135 = r720134 * r720134;
double r720136 = y;
double r720137 = 4.0;
double r720138 = r720136 * r720137;
double r720139 = z;
double r720140 = r720139 * r720139;
double r720141 = t;
double r720142 = r720140 - r720141;
double r720143 = r720138 * r720142;
double r720144 = r720135 - r720143;
return r720144;
}
double f(double x, double y, double z, double t) {
double r720145 = z;
double r720146 = r720145 * r720145;
double r720147 = 6.123223926836545e+304;
bool r720148 = r720146 <= r720147;
double r720149 = 4.0;
double r720150 = y;
double r720151 = t;
double r720152 = r720151 - r720146;
double r720153 = r720150 * r720152;
double r720154 = x;
double r720155 = r720154 * r720154;
double r720156 = fma(r720149, r720153, r720155);
double r720157 = sqrt(r720151);
double r720158 = r720157 + r720145;
double r720159 = r720150 * r720158;
double r720160 = r720157 - r720145;
double r720161 = r720159 * r720160;
double r720162 = fma(r720149, r720161, r720155);
double r720163 = r720148 ? r720156 : r720162;
return r720163;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 6.1 |
|---|---|
| Target | 6.1 |
| Herbie | 3.3 |
if (* z z) < 6.123223926836545e+304Initial program 0.1
Simplified0.1
if 6.123223926836545e+304 < (* z z) Initial program 62.7
Simplified62.7
rmApplied add-sqr-sqrt63.3
Applied difference-of-squares63.3
Applied associate-*r*33.7
Final simplification3.3
herbie shell --seed 2020047 +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))))