\sqrt{\frac{\left(x \cdot x + y \cdot y\right) + z \cdot z}{3}}\begin{array}{l}
\mathbf{if}\;z \le -2.2291282360035104 \cdot 10^{133}:\\
\;\;\;\;-\frac{z}{\sqrt{3}}\\
\mathbf{elif}\;z \le 2.8539710068846394 \cdot 10^{65}:\\
\;\;\;\;\sqrt{\frac{\sqrt{\mathsf{fma}\left(z, z, \mathsf{fma}\left(x, x, y \cdot y\right)\right)}}{\frac{3}{\sqrt{\mathsf{fma}\left(z, z, \mathsf{fma}\left(x, x, y \cdot y\right)\right)}}}}\\
\mathbf{else}:\\
\;\;\;\;z \cdot \sqrt{0.333333333333333315}\\
\end{array}double f(double x, double y, double z) {
double r958369 = x;
double r958370 = r958369 * r958369;
double r958371 = y;
double r958372 = r958371 * r958371;
double r958373 = r958370 + r958372;
double r958374 = z;
double r958375 = r958374 * r958374;
double r958376 = r958373 + r958375;
double r958377 = 3.0;
double r958378 = r958376 / r958377;
double r958379 = sqrt(r958378);
return r958379;
}
double f(double x, double y, double z) {
double r958380 = z;
double r958381 = -2.2291282360035104e+133;
bool r958382 = r958380 <= r958381;
double r958383 = 3.0;
double r958384 = sqrt(r958383);
double r958385 = r958380 / r958384;
double r958386 = -r958385;
double r958387 = 2.8539710068846394e+65;
bool r958388 = r958380 <= r958387;
double r958389 = x;
double r958390 = y;
double r958391 = r958390 * r958390;
double r958392 = fma(r958389, r958389, r958391);
double r958393 = fma(r958380, r958380, r958392);
double r958394 = sqrt(r958393);
double r958395 = r958383 / r958394;
double r958396 = r958394 / r958395;
double r958397 = sqrt(r958396);
double r958398 = 0.3333333333333333;
double r958399 = sqrt(r958398);
double r958400 = r958380 * r958399;
double r958401 = r958388 ? r958397 : r958400;
double r958402 = r958382 ? r958386 : r958401;
return r958402;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 38.1 |
|---|---|
| Target | 25.6 |
| Herbie | 25.8 |
if z < -2.2291282360035104e+133Initial program 59.8
Simplified59.8
rmApplied add-sqr-sqrt59.8
Applied associate-/l*59.7
rmApplied add-sqr-sqrt59.7
Applied sqrt-prod59.8
Applied add-sqr-sqrt59.8
Applied times-frac59.8
Applied add-sqr-sqrt59.8
Applied sqrt-prod59.8
Applied times-frac59.8
Simplified59.8
Simplified59.8
Taylor expanded around -inf 17.4
Simplified17.4
if -2.2291282360035104e+133 < z < 2.8539710068846394e+65Initial program 29.2
Simplified29.2
rmApplied add-sqr-sqrt29.2
Applied associate-/l*29.2
if 2.8539710068846394e+65 < z Initial program 51.4
Simplified51.4
Taylor expanded around inf 20.8
Final simplification25.8
herbie shell --seed 2020042 +o rules:numerics
(FPCore (x y z)
:name "Data.Array.Repa.Algorithms.Pixel:doubleRmsOfRGB8 from repa-algorithms-3.4.0.1"
:precision binary64
:herbie-target
(if (< z -6.396479394109776e+136) (/ (- z) (sqrt 3)) (if (< z 7.320293694404182e+117) (/ (sqrt (+ (+ (* z z) (* x x)) (* y y))) (sqrt 3)) (* (sqrt 0.3333333333333333) z)))
(sqrt (/ (+ (+ (* x x) (* y y)) (* z z)) 3)))