x \cdot x - \left(y \cdot 4\right) \cdot \left(z \cdot z - t\right)
\begin{array}{l}
\mathbf{if}\;z \cdot z \le 5.262792164914477010314770127344285061599 \cdot 10^{261}:\\
\;\;\;\;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 r430107 = x;
double r430108 = r430107 * r430107;
double r430109 = y;
double r430110 = 4.0;
double r430111 = r430109 * r430110;
double r430112 = z;
double r430113 = r430112 * r430112;
double r430114 = t;
double r430115 = r430113 - r430114;
double r430116 = r430111 * r430115;
double r430117 = r430108 - r430116;
return r430117;
}
double f(double x, double y, double z, double t) {
double r430118 = z;
double r430119 = r430118 * r430118;
double r430120 = 5.262792164914477e+261;
bool r430121 = r430119 <= r430120;
double r430122 = x;
double r430123 = r430122 * r430122;
double r430124 = y;
double r430125 = 4.0;
double r430126 = r430124 * r430125;
double r430127 = t;
double r430128 = r430119 - r430127;
double r430129 = r430126 * r430128;
double r430130 = r430123 - r430129;
double r430131 = sqrt(r430127);
double r430132 = r430118 + r430131;
double r430133 = r430126 * r430132;
double r430134 = r430118 - r430131;
double r430135 = r430133 * r430134;
double r430136 = r430123 - r430135;
double r430137 = r430121 ? r430130 : r430136;
return r430137;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.0 |
|---|---|
| Target | 6.0 |
| Herbie | 4.0 |
if (* z z) < 5.262792164914477e+261Initial program 0.1
if 5.262792164914477e+261 < (* z z) Initial program 48.0
rmApplied add-sqr-sqrt56.8
Applied difference-of-squares56.8
Applied associate-*r*32.3
Final simplification4.0
herbie shell --seed 2019303
(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))))