\sqrt{\frac{\left(x \cdot x + y \cdot y\right) + z \cdot z}{3}}\begin{array}{l}
\mathbf{if}\;y \le -1.717333272640103545901465763102229690483 \cdot 10^{89}:\\
\;\;\;\;\left(-y\right) \cdot \sqrt{0.3333333333333333148296162562473909929395}\\
\mathbf{elif}\;y \le 2.673911141236909644899525953792608723737 \cdot 10^{-195}:\\
\;\;\;\;\sqrt{x \cdot x + \left(z \cdot z + y \cdot y\right)} \cdot \sqrt{\frac{1}{3}}\\
\mathbf{elif}\;y \le 3.267479005742163364041445759339258528358 \cdot 10^{-158}:\\
\;\;\;\;\sqrt{0.3333333333333333148296162562473909929395} \cdot z\\
\mathbf{elif}\;y \le 1.902370008063671102963145796212009492267 \cdot 10^{138}:\\
\;\;\;\;\sqrt{x \cdot x + \left(z \cdot z + y \cdot y\right)} \cdot \sqrt{\frac{1}{3}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt{0.3333333333333333148296162562473909929395} \cdot y\\
\end{array}double f(double x, double y, double z) {
double r728865 = x;
double r728866 = r728865 * r728865;
double r728867 = y;
double r728868 = r728867 * r728867;
double r728869 = r728866 + r728868;
double r728870 = z;
double r728871 = r728870 * r728870;
double r728872 = r728869 + r728871;
double r728873 = 3.0;
double r728874 = r728872 / r728873;
double r728875 = sqrt(r728874);
return r728875;
}
double f(double x, double y, double z) {
double r728876 = y;
double r728877 = -1.7173332726401035e+89;
bool r728878 = r728876 <= r728877;
double r728879 = -r728876;
double r728880 = 0.3333333333333333;
double r728881 = sqrt(r728880);
double r728882 = r728879 * r728881;
double r728883 = 2.6739111412369096e-195;
bool r728884 = r728876 <= r728883;
double r728885 = x;
double r728886 = r728885 * r728885;
double r728887 = z;
double r728888 = r728887 * r728887;
double r728889 = r728876 * r728876;
double r728890 = r728888 + r728889;
double r728891 = r728886 + r728890;
double r728892 = sqrt(r728891);
double r728893 = 1.0;
double r728894 = 3.0;
double r728895 = r728893 / r728894;
double r728896 = sqrt(r728895);
double r728897 = r728892 * r728896;
double r728898 = 3.2674790057421634e-158;
bool r728899 = r728876 <= r728898;
double r728900 = r728881 * r728887;
double r728901 = 1.902370008063671e+138;
bool r728902 = r728876 <= r728901;
double r728903 = r728881 * r728876;
double r728904 = r728902 ? r728897 : r728903;
double r728905 = r728899 ? r728900 : r728904;
double r728906 = r728884 ? r728897 : r728905;
double r728907 = r728878 ? r728882 : r728906;
return r728907;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 37.8 |
|---|---|
| Target | 25.8 |
| Herbie | 26.0 |
if y < -1.7173332726401035e+89Initial program 53.6
Simplified53.6
Taylor expanded around -inf 19.4
Simplified19.4
if -1.7173332726401035e+89 < y < 2.6739111412369096e-195 or 3.2674790057421634e-158 < y < 1.902370008063671e+138Initial program 28.9
Simplified28.9
rmApplied div-inv28.9
Applied sqrt-prod29.0
Simplified29.0
if 2.6739111412369096e-195 < y < 3.2674790057421634e-158Initial program 33.2
Simplified33.2
Taylor expanded around 0 48.1
Simplified48.1
if 1.902370008063671e+138 < y Initial program 60.7
Simplified60.7
Taylor expanded around inf 14.9
Simplified14.9
Final simplification26.0
herbie shell --seed 2019194
(FPCore (x y z)
:name "Data.Array.Repa.Algorithms.Pixel:doubleRmsOfRGB8 from repa-algorithms-3.4.0.1"
: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)))