\sqrt{\frac{\left(x \cdot x + y \cdot y\right) + z \cdot z}{3}}\begin{array}{l}
\mathbf{if}\;x \le -1.562702489758357495152124455939761881698 \cdot 10^{103}:\\
\;\;\;\;-x \cdot \sqrt{0.3333333333333333148296162562473909929395}\\
\mathbf{elif}\;x \le 2.33657074031230004125882966613984705911 \cdot 10^{138}:\\
\;\;\;\;\sqrt{\frac{\sqrt{\left(x \cdot x + y \cdot y\right) + z \cdot z}}{\sqrt[3]{3} \cdot \sqrt[3]{3}} \cdot \frac{\sqrt{\left(x \cdot x + y \cdot y\right) + z \cdot z}}{\sqrt[3]{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 r626700 = x;
double r626701 = r626700 * r626700;
double r626702 = y;
double r626703 = r626702 * r626702;
double r626704 = r626701 + r626703;
double r626705 = z;
double r626706 = r626705 * r626705;
double r626707 = r626704 + r626706;
double r626708 = 3.0;
double r626709 = r626707 / r626708;
double r626710 = sqrt(r626709);
return r626710;
}
double f(double x, double y, double z) {
double r626711 = x;
double r626712 = -1.5627024897583575e+103;
bool r626713 = r626711 <= r626712;
double r626714 = 0.3333333333333333;
double r626715 = sqrt(r626714);
double r626716 = r626711 * r626715;
double r626717 = -r626716;
double r626718 = 2.3365707403123e+138;
bool r626719 = r626711 <= r626718;
double r626720 = r626711 * r626711;
double r626721 = y;
double r626722 = r626721 * r626721;
double r626723 = r626720 + r626722;
double r626724 = z;
double r626725 = r626724 * r626724;
double r626726 = r626723 + r626725;
double r626727 = sqrt(r626726);
double r626728 = 3.0;
double r626729 = cbrt(r626728);
double r626730 = r626729 * r626729;
double r626731 = r626727 / r626730;
double r626732 = r626727 / r626729;
double r626733 = r626731 * r626732;
double r626734 = sqrt(r626733);
double r626735 = 1.0;
double r626736 = r626735 / r626730;
double r626737 = sqrt(r626736);
double r626738 = r626735 / r626729;
double r626739 = sqrt(r626738);
double r626740 = r626739 * r626711;
double r626741 = r626737 * r626740;
double r626742 = r626719 ? r626734 : r626741;
double r626743 = r626713 ? r626717 : r626742;
return r626743;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 38.1 |
|---|---|
| Target | 25.6 |
| Herbie | 25.7 |
if x < -1.5627024897583575e+103Initial program 54.3
Taylor expanded around -inf 17.8
Simplified17.8
if -1.5627024897583575e+103 < x < 2.3365707403123e+138Initial program 29.7
rmApplied add-cube-cbrt29.7
Applied add-sqr-sqrt29.7
Applied times-frac29.7
if 2.3365707403123e+138 < x Initial program 60.4
rmApplied add-cube-cbrt60.4
Applied *-un-lft-identity60.4
Applied times-frac60.4
Applied sqrt-prod60.4
Taylor expanded around inf 15.3
Final simplification25.7
herbie shell --seed 2019323
(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)))