\sqrt{\frac{\left(x \cdot x + y \cdot y\right) + z \cdot z}{3.0}}\begin{array}{l}
\mathbf{if}\;y \le -1.3282248930815427 \cdot 10^{+154}:\\
\;\;\;\;\sqrt{0.3333333333333333} \cdot \left(-y\right)\\
\mathbf{elif}\;y \le 8.243533173233274 \cdot 10^{+154}:\\
\;\;\;\;\sqrt{\frac{\mathsf{fma}\left(y, y, \mathsf{fma}\left(x, x, z \cdot z\right)\right)}{3.0}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt{0.3333333333333333} \cdot y\\
\end{array}double f(double x, double y, double z) {
double r43130995 = x;
double r43130996 = r43130995 * r43130995;
double r43130997 = y;
double r43130998 = r43130997 * r43130997;
double r43130999 = r43130996 + r43130998;
double r43131000 = z;
double r43131001 = r43131000 * r43131000;
double r43131002 = r43130999 + r43131001;
double r43131003 = 3.0;
double r43131004 = r43131002 / r43131003;
double r43131005 = sqrt(r43131004);
return r43131005;
}
double f(double x, double y, double z) {
double r43131006 = y;
double r43131007 = -1.3282248930815427e+154;
bool r43131008 = r43131006 <= r43131007;
double r43131009 = 0.3333333333333333;
double r43131010 = sqrt(r43131009);
double r43131011 = -r43131006;
double r43131012 = r43131010 * r43131011;
double r43131013 = 8.243533173233274e+154;
bool r43131014 = r43131006 <= r43131013;
double r43131015 = x;
double r43131016 = z;
double r43131017 = r43131016 * r43131016;
double r43131018 = fma(r43131015, r43131015, r43131017);
double r43131019 = fma(r43131006, r43131006, r43131018);
double r43131020 = 3.0;
double r43131021 = r43131019 / r43131020;
double r43131022 = sqrt(r43131021);
double r43131023 = r43131010 * r43131006;
double r43131024 = r43131014 ? r43131022 : r43131023;
double r43131025 = r43131008 ? r43131012 : r43131024;
return r43131025;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 35.7 |
|---|---|
| Target | 24.6 |
| Herbie | 24.3 |
if y < -1.3282248930815427e+154Initial program 59.3
Simplified59.3
Taylor expanded around -inf 14.2
Simplified14.2
if -1.3282248930815427e+154 < y < 8.243533173233274e+154Initial program 27.7
Simplified27.7
if 8.243533173233274e+154 < y Initial program 59.3
Simplified59.3
Taylor expanded around inf 14.4
Final simplification24.3
herbie shell --seed 2019163 +o rules:numerics
(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)))