\sqrt{\frac{\left(x \cdot x + y \cdot y\right) + z \cdot z}{3.0}}\begin{array}{l}
\mathbf{if}\;z \le -1.1364581299832128 \cdot 10^{+139}:\\
\;\;\;\;-\frac{z}{\sqrt{3.0}}\\
\mathbf{elif}\;z \le 6.472584579521452 \cdot 10^{+153}:\\
\;\;\;\;\sqrt{\left(y \cdot y + x \cdot x\right) + z \cdot z} \cdot \sqrt{\frac{1}{3.0}}\\
\mathbf{else}:\\
\;\;\;\;\frac{z}{\sqrt{3.0}}\\
\end{array}double f(double x, double y, double z) {
double r42302816 = x;
double r42302817 = r42302816 * r42302816;
double r42302818 = y;
double r42302819 = r42302818 * r42302818;
double r42302820 = r42302817 + r42302819;
double r42302821 = z;
double r42302822 = r42302821 * r42302821;
double r42302823 = r42302820 + r42302822;
double r42302824 = 3.0;
double r42302825 = r42302823 / r42302824;
double r42302826 = sqrt(r42302825);
return r42302826;
}
double f(double x, double y, double z) {
double r42302827 = z;
double r42302828 = -1.1364581299832128e+139;
bool r42302829 = r42302827 <= r42302828;
double r42302830 = 3.0;
double r42302831 = sqrt(r42302830);
double r42302832 = r42302827 / r42302831;
double r42302833 = -r42302832;
double r42302834 = 6.472584579521452e+153;
bool r42302835 = r42302827 <= r42302834;
double r42302836 = y;
double r42302837 = r42302836 * r42302836;
double r42302838 = x;
double r42302839 = r42302838 * r42302838;
double r42302840 = r42302837 + r42302839;
double r42302841 = r42302827 * r42302827;
double r42302842 = r42302840 + r42302841;
double r42302843 = sqrt(r42302842);
double r42302844 = 1.0;
double r42302845 = r42302844 / r42302830;
double r42302846 = sqrt(r42302845);
double r42302847 = r42302843 * r42302846;
double r42302848 = r42302835 ? r42302847 : r42302832;
double r42302849 = r42302829 ? r42302833 : r42302848;
return r42302849;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 34.8 |
|---|---|
| Target | 23.7 |
| Herbie | 23.6 |
if z < -1.1364581299832128e+139Initial program 56.5
rmApplied div-inv56.5
Applied sqrt-prod56.5
rmApplied sqrt-div56.5
Applied associate-*r/56.5
Simplified56.5
Taylor expanded around -inf 15.3
Simplified15.3
if -1.1364581299832128e+139 < z < 6.472584579521452e+153Initial program 26.6
rmApplied div-inv26.6
Applied sqrt-prod26.7
if 6.472584579521452e+153 < z Initial program 59.2
rmApplied div-inv59.2
Applied sqrt-prod59.2
rmApplied sqrt-div59.2
Applied associate-*r/59.2
Simplified59.2
Taylor expanded around inf 14.7
Final simplification23.6
herbie shell --seed 2019164
(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)))