\sqrt{\frac{\left(x \cdot x + y \cdot y\right) + z \cdot z}{3}}\begin{array}{l}
\mathbf{if}\;x \le -3.73162717735063063668272424683324659007 \cdot 10^{128}:\\
\;\;\;\;\sqrt{\frac{1}{\sqrt[3]{3} \cdot \sqrt[3]{3}}} \cdot \left(-1 \cdot \left(\sqrt{\frac{1}{\sqrt[3]{3}}} \cdot x\right)\right)\\
\mathbf{elif}\;x \le 2.891651306543406684786707993923858296715 \cdot 10^{143}:\\
\;\;\;\;\sqrt{\frac{\left(x \cdot x + y \cdot y\right) + z \cdot z}{3}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt{\frac{1}{\sqrt[3]{3} \cdot \sqrt[3]{3}}} \cdot \left(\sqrt{\frac{1}{\sqrt[3]{3}}} \cdot x\right)\\
\end{array}double f(double x, double y, double z) {
double r902296 = x;
double r902297 = r902296 * r902296;
double r902298 = y;
double r902299 = r902298 * r902298;
double r902300 = r902297 + r902299;
double r902301 = z;
double r902302 = r902301 * r902301;
double r902303 = r902300 + r902302;
double r902304 = 3.0;
double r902305 = r902303 / r902304;
double r902306 = sqrt(r902305);
return r902306;
}
double f(double x, double y, double z) {
double r902307 = x;
double r902308 = -3.731627177350631e+128;
bool r902309 = r902307 <= r902308;
double r902310 = 1.0;
double r902311 = 3.0;
double r902312 = cbrt(r902311);
double r902313 = r902312 * r902312;
double r902314 = r902310 / r902313;
double r902315 = sqrt(r902314);
double r902316 = -1.0;
double r902317 = r902310 / r902312;
double r902318 = sqrt(r902317);
double r902319 = r902318 * r902307;
double r902320 = r902316 * r902319;
double r902321 = r902315 * r902320;
double r902322 = 2.8916513065434067e+143;
bool r902323 = r902307 <= r902322;
double r902324 = r902307 * r902307;
double r902325 = y;
double r902326 = r902325 * r902325;
double r902327 = r902324 + r902326;
double r902328 = z;
double r902329 = r902328 * r902328;
double r902330 = r902327 + r902329;
double r902331 = r902330 / r902311;
double r902332 = sqrt(r902331);
double r902333 = r902315 * r902319;
double r902334 = r902323 ? r902332 : r902333;
double r902335 = r902309 ? r902321 : r902334;
return r902335;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 38.2 |
|---|---|
| Target | 26.0 |
| Herbie | 25.5 |
if x < -3.731627177350631e+128Initial program 58.8
rmApplied add-cube-cbrt58.8
Applied *-un-lft-identity58.8
Applied times-frac58.8
Applied sqrt-prod58.8
Taylor expanded around -inf 15.7
if -3.731627177350631e+128 < x < 2.8916513065434067e+143Initial program 29.7
if 2.8916513065434067e+143 < x Initial program 61.6
rmApplied add-cube-cbrt61.6
Applied *-un-lft-identity61.6
Applied times-frac61.6
Applied sqrt-prod61.6
Taylor expanded around inf 13.8
Final simplification25.5
herbie shell --seed 2019354
(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)))