\sqrt{\frac{\left(x \cdot x + y \cdot y\right) + z \cdot z}{3}}\begin{array}{l}
\mathbf{if}\;z \le -3.74693859576126102544728952505913367202 \cdot 10^{111}:\\
\;\;\;\;\frac{\frac{-z}{\left|\sqrt[3]{3}\right|}}{\sqrt{\sqrt[3]{3}}}\\
\mathbf{elif}\;z \le 4.17182871699966700452276153071931598076 \cdot 10^{130}:\\
\;\;\;\;\sqrt{\mathsf{fma}\left(z, z, \mathsf{fma}\left(x, x, y \cdot y\right)\right)} \cdot \sqrt{\frac{1}{3}}\\
\mathbf{else}:\\
\;\;\;\;\frac{z}{\sqrt{3}}\\
\end{array}double f(double x, double y, double z) {
double r564279 = x;
double r564280 = r564279 * r564279;
double r564281 = y;
double r564282 = r564281 * r564281;
double r564283 = r564280 + r564282;
double r564284 = z;
double r564285 = r564284 * r564284;
double r564286 = r564283 + r564285;
double r564287 = 3.0;
double r564288 = r564286 / r564287;
double r564289 = sqrt(r564288);
return r564289;
}
double f(double x, double y, double z) {
double r564290 = z;
double r564291 = -3.746938595761261e+111;
bool r564292 = r564290 <= r564291;
double r564293 = -r564290;
double r564294 = 3.0;
double r564295 = cbrt(r564294);
double r564296 = fabs(r564295);
double r564297 = r564293 / r564296;
double r564298 = sqrt(r564295);
double r564299 = r564297 / r564298;
double r564300 = 4.171828716999667e+130;
bool r564301 = r564290 <= r564300;
double r564302 = x;
double r564303 = y;
double r564304 = r564303 * r564303;
double r564305 = fma(r564302, r564302, r564304);
double r564306 = fma(r564290, r564290, r564305);
double r564307 = sqrt(r564306);
double r564308 = 1.0;
double r564309 = r564308 / r564294;
double r564310 = sqrt(r564309);
double r564311 = r564307 * r564310;
double r564312 = sqrt(r564294);
double r564313 = r564290 / r564312;
double r564314 = r564301 ? r564311 : r564313;
double r564315 = r564292 ? r564299 : r564314;
return r564315;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 38.1 |
|---|---|
| Target | 25.6 |
| Herbie | 25.6 |
if z < -3.746938595761261e+111Initial program 56.5
Simplified56.5
rmApplied sqrt-div56.5
Taylor expanded around -inf 18.0
Simplified18.0
rmApplied add-cube-cbrt18.0
Applied sqrt-prod18.0
Applied associate-/r*18.0
Simplified18.0
if -3.746938595761261e+111 < z < 4.171828716999667e+130Initial program 29.4
Simplified29.4
rmApplied div-inv29.4
Applied sqrt-prod29.5
if 4.171828716999667e+130 < z Initial program 59.0
Simplified59.0
rmApplied sqrt-div59.0
Taylor expanded around inf 15.8
Final simplification25.6
herbie shell --seed 2019323 +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)))