x \cdot x - \left(y \cdot 4\right) \cdot \left(z \cdot z - t\right)
\begin{array}{l}
\mathbf{if}\;z \cdot z \le 4.1586096751525248895151859774550831747 \cdot 10^{293}:\\
\;\;\;\;\mathsf{fma}\left(y \cdot 4, \mathsf{fma}\left(z, -z, t\right), x \cdot x\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(4 \cdot t, y, x \cdot x\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r407130 = x;
double r407131 = r407130 * r407130;
double r407132 = y;
double r407133 = 4.0;
double r407134 = r407132 * r407133;
double r407135 = z;
double r407136 = r407135 * r407135;
double r407137 = t;
double r407138 = r407136 - r407137;
double r407139 = r407134 * r407138;
double r407140 = r407131 - r407139;
return r407140;
}
double f(double x, double y, double z, double t) {
double r407141 = z;
double r407142 = r407141 * r407141;
double r407143 = 4.158609675152525e+293;
bool r407144 = r407142 <= r407143;
double r407145 = y;
double r407146 = 4.0;
double r407147 = r407145 * r407146;
double r407148 = -r407141;
double r407149 = t;
double r407150 = fma(r407141, r407148, r407149);
double r407151 = x;
double r407152 = r407151 * r407151;
double r407153 = fma(r407147, r407150, r407152);
double r407154 = r407146 * r407149;
double r407155 = fma(r407154, r407145, r407152);
double r407156 = r407144 ? r407153 : r407155;
return r407156;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 6.1 |
|---|---|
| Target | 6.1 |
| Herbie | 5.8 |
if (* z z) < 4.158609675152525e+293Initial program 0.1
Simplified0.1
Taylor expanded around 0 0.1
Simplified0.1
if 4.158609675152525e+293 < (* z z) Initial program 59.2
Simplified59.2
Taylor expanded around 0 55.5
Simplified55.5
Final simplification5.8
herbie shell --seed 2019323 +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))))