\sqrt{\frac{\left(x \cdot x + y \cdot y\right) + z \cdot z}{3}}\begin{array}{l}
\mathbf{if}\;x \le -1.147883741290531569007013017752845121651 \cdot 10^{60}:\\
\;\;\;\;\left(\sqrt{\sqrt{0.3333333333333333148296162562473909929395}} \cdot x\right) \cdot \left(-\sqrt{\sqrt{0.3333333333333333148296162562473909929395}}\right)\\
\mathbf{elif}\;x \le 3.863641896649309161054351757570478853539 \cdot 10^{84}:\\
\;\;\;\;\sqrt{z \cdot z + \left({y}^{2} + x \cdot x\right)} \cdot \sqrt{\frac{1}{3}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt{0.3333333333333333148296162562473909929395} \cdot x\\
\end{array}double f(double x, double y, double z) {
double r596958 = x;
double r596959 = r596958 * r596958;
double r596960 = y;
double r596961 = r596960 * r596960;
double r596962 = r596959 + r596961;
double r596963 = z;
double r596964 = r596963 * r596963;
double r596965 = r596962 + r596964;
double r596966 = 3.0;
double r596967 = r596965 / r596966;
double r596968 = sqrt(r596967);
return r596968;
}
double f(double x, double y, double z) {
double r596969 = x;
double r596970 = -1.1478837412905316e+60;
bool r596971 = r596969 <= r596970;
double r596972 = 0.3333333333333333;
double r596973 = sqrt(r596972);
double r596974 = sqrt(r596973);
double r596975 = r596974 * r596969;
double r596976 = -r596974;
double r596977 = r596975 * r596976;
double r596978 = 3.863641896649309e+84;
bool r596979 = r596969 <= r596978;
double r596980 = z;
double r596981 = r596980 * r596980;
double r596982 = y;
double r596983 = 2.0;
double r596984 = pow(r596982, r596983);
double r596985 = r596969 * r596969;
double r596986 = r596984 + r596985;
double r596987 = r596981 + r596986;
double r596988 = sqrt(r596987);
double r596989 = 1.0;
double r596990 = 3.0;
double r596991 = r596989 / r596990;
double r596992 = sqrt(r596991);
double r596993 = r596988 * r596992;
double r596994 = r596973 * r596969;
double r596995 = r596979 ? r596993 : r596994;
double r596996 = r596971 ? r596977 : r596995;
return r596996;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 37.4 |
|---|---|
| Target | 25.4 |
| Herbie | 26.0 |
if x < -1.1478837412905316e+60Initial program 48.9
Taylor expanded around -inf 21.9
Simplified21.9
rmApplied add-sqr-sqrt21.9
Applied sqrt-prod21.9
Applied associate-*l*21.9
Simplified21.9
if -1.1478837412905316e+60 < x < 3.863641896649309e+84Initial program 29.1
rmApplied div-inv29.1
Applied sqrt-prod29.2
Simplified29.2
if 3.863641896649309e+84 < x Initial program 53.2
Taylor expanded around inf 19.8
Simplified19.8
Final simplification26.0
herbie shell --seed 2019195
(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)))