\sqrt{\frac{\left(x \cdot x + y \cdot y\right) + z \cdot z}{3}}\begin{array}{l}
\mathbf{if}\;x \leq -3.729724887074998 \cdot 10^{+100}:\\
\;\;\;\;\left(\sqrt{\frac{1}{\sqrt[3]{\sqrt{3}}}} \cdot \sqrt{\frac{1}{\sqrt[3]{3} \cdot \sqrt[3]{3}}}\right) \cdot \left(x \cdot \left(-{\left(\frac{1}{\sqrt{3}}\right)}^{0.16666666666666666}\right)\right)\\
\mathbf{elif}\;x \leq 2.142628107794844 \cdot 10^{+138}:\\
\;\;\;\;\sqrt{\frac{\left(x \cdot x + y \cdot y\right) + z \cdot z}{3}}\\
\mathbf{else}:\\
\;\;\;\;\left(\sqrt{\frac{1}{\sqrt[3]{\sqrt{3}}}} \cdot \sqrt{\frac{1}{\sqrt[3]{3} \cdot \sqrt[3]{3}}}\right) \cdot \left(x \cdot {\left(\frac{1}{\sqrt{3}}\right)}^{0.16666666666666666}\right)\\
\end{array}double code(double x, double y, double z) {
return ((double) sqrt((((double) (((double) (((double) (x * x)) + ((double) (y * y)))) + ((double) (z * z)))) / 3.0)));
}
double code(double x, double y, double z) {
double VAR;
if ((x <= -3.729724887074998e+100)) {
VAR = ((double) (((double) (((double) sqrt((1.0 / ((double) cbrt(((double) sqrt(3.0))))))) * ((double) sqrt((1.0 / ((double) (((double) cbrt(3.0)) * ((double) cbrt(3.0))))))))) * ((double) (x * ((double) -(((double) pow((1.0 / ((double) sqrt(3.0))), 0.16666666666666666))))))));
} else {
double VAR_1;
if ((x <= 2.142628107794844e+138)) {
VAR_1 = ((double) sqrt((((double) (((double) (((double) (x * x)) + ((double) (y * y)))) + ((double) (z * z)))) / 3.0)));
} else {
VAR_1 = ((double) (((double) (((double) sqrt((1.0 / ((double) cbrt(((double) sqrt(3.0))))))) * ((double) sqrt((1.0 / ((double) (((double) cbrt(3.0)) * ((double) cbrt(3.0))))))))) * ((double) (x * ((double) pow((1.0 / ((double) sqrt(3.0))), 0.16666666666666666))))));
}
VAR = VAR_1;
}
return VAR;
}




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.72972488707499779e100Initial program 54.8
rmApplied add-cube-cbrt54.8
Applied *-un-lft-identity54.8
Applied times-frac54.8
Applied sqrt-prod54.8
Simplified54.8
rmApplied add-sqr-sqrt54.9
Applied cbrt-prod54.9
Applied *-un-lft-identity54.9
Applied times-frac54.8
Applied sqrt-prod54.8
Applied associate-*r*54.8
Simplified54.8
Taylor expanded around -inf 18.3
Simplified18.3
if -3.72972488707499779e100 < x < 2.142628107794844e138Initial program 29.4
if 2.142628107794844e138 < x Initial program 60.9
rmApplied add-cube-cbrt60.9
Applied *-un-lft-identity60.9
Applied times-frac60.9
Applied sqrt-prod60.9
Simplified60.9
rmApplied add-sqr-sqrt60.9
Applied cbrt-prod60.9
Applied *-un-lft-identity60.9
Applied times-frac60.9
Applied sqrt-prod60.9
Applied associate-*r*60.9
Simplified60.9
Taylor expanded around inf 15.3
Final simplification25.5
herbie shell --seed 2020199
(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.0)) (if (< z 7.320293694404182e+117) (/ (sqrt (+ (+ (* z z) (* x x)) (* y y))) (sqrt 3.0)) (* (sqrt 0.3333333333333333) z)))
(sqrt (/ (+ (+ (* x x) (* y y)) (* z z)) 3.0)))