\sqrt{\frac{\left(x \cdot x + y \cdot y\right) + z \cdot z}{3}}\begin{array}{l}
\mathbf{if}\;x \le -1.653486872877025328162949610044300723903 \cdot 10^{103}:\\
\;\;\;\;\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 4.548512359051216215734424553488962080637 \cdot 10^{125}:\\
\;\;\;\;\sqrt{\sqrt{\left(x \cdot x + y \cdot y\right) + z \cdot z} \cdot \frac{\sqrt{\left(x \cdot x + y \cdot y\right) + z \cdot z}}{3}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\sqrt{3}}\\
\end{array}double f(double x, double y, double z) {
double r969817 = x;
double r969818 = r969817 * r969817;
double r969819 = y;
double r969820 = r969819 * r969819;
double r969821 = r969818 + r969820;
double r969822 = z;
double r969823 = r969822 * r969822;
double r969824 = r969821 + r969823;
double r969825 = 3.0;
double r969826 = r969824 / r969825;
double r969827 = sqrt(r969826);
return r969827;
}
double f(double x, double y, double z) {
double r969828 = x;
double r969829 = -1.6534868728770253e+103;
bool r969830 = r969828 <= r969829;
double r969831 = 1.0;
double r969832 = 3.0;
double r969833 = cbrt(r969832);
double r969834 = r969833 * r969833;
double r969835 = r969831 / r969834;
double r969836 = sqrt(r969835);
double r969837 = -1.0;
double r969838 = r969831 / r969833;
double r969839 = sqrt(r969838);
double r969840 = r969839 * r969828;
double r969841 = r969837 * r969840;
double r969842 = r969836 * r969841;
double r969843 = 4.548512359051216e+125;
bool r969844 = r969828 <= r969843;
double r969845 = r969828 * r969828;
double r969846 = y;
double r969847 = r969846 * r969846;
double r969848 = r969845 + r969847;
double r969849 = z;
double r969850 = r969849 * r969849;
double r969851 = r969848 + r969850;
double r969852 = sqrt(r969851);
double r969853 = r969852 / r969832;
double r969854 = r969852 * r969853;
double r969855 = sqrt(r969854);
double r969856 = sqrt(r969832);
double r969857 = r969828 / r969856;
double r969858 = r969844 ? r969855 : r969857;
double r969859 = r969830 ? r969842 : r969858;
return r969859;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 37.6 |
|---|---|
| Target | 25.3 |
| Herbie | 25.6 |
if x < -1.6534868728770253e+103Initial program 54.4
rmApplied add-cube-cbrt54.4
Applied *-un-lft-identity54.4
Applied times-frac54.5
Applied sqrt-prod54.5
Taylor expanded around -inf 19.4
if -1.6534868728770253e+103 < x < 4.548512359051216e+125Initial program 29.2
rmApplied *-un-lft-identity29.2
Applied add-sqr-sqrt29.2
Applied times-frac29.2
Simplified29.2
if 4.548512359051216e+125 < x Initial program 58.0
rmApplied add-sqr-sqrt58.0
Applied add-sqr-sqrt58.0
Applied times-frac58.0
Taylor expanded around inf 15.9
Final simplification25.6
herbie shell --seed 2019362 +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)))