\sqrt{\frac{\left(x \cdot x + y \cdot y\right) + z \cdot z}{3}}\begin{array}{l}
\mathbf{if}\;y \le -2.224655211931350154467905423564222198286 \cdot 10^{105}:\\
\;\;\;\;\left(-y\right) \cdot \sqrt{0.3333333333333333148296162562473909929395}\\
\mathbf{elif}\;y \le 1.675593236197967767813497815885587492334 \cdot 10^{62}:\\
\;\;\;\;\sqrt{\frac{1}{\sqrt[3]{3} \cdot \sqrt[3]{3}} \cdot \frac{\mathsf{fma}\left(y, y, \mathsf{fma}\left(x, x, z \cdot z\right)\right)}{\sqrt[3]{3}}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt{0.3333333333333333148296162562473909929395} \cdot y\\
\end{array}double f(double x, double y, double z) {
double r37070257 = x;
double r37070258 = r37070257 * r37070257;
double r37070259 = y;
double r37070260 = r37070259 * r37070259;
double r37070261 = r37070258 + r37070260;
double r37070262 = z;
double r37070263 = r37070262 * r37070262;
double r37070264 = r37070261 + r37070263;
double r37070265 = 3.0;
double r37070266 = r37070264 / r37070265;
double r37070267 = sqrt(r37070266);
return r37070267;
}
double f(double x, double y, double z) {
double r37070268 = y;
double r37070269 = -2.2246552119313502e+105;
bool r37070270 = r37070268 <= r37070269;
double r37070271 = -r37070268;
double r37070272 = 0.3333333333333333;
double r37070273 = sqrt(r37070272);
double r37070274 = r37070271 * r37070273;
double r37070275 = 1.6755932361979678e+62;
bool r37070276 = r37070268 <= r37070275;
double r37070277 = 1.0;
double r37070278 = 3.0;
double r37070279 = cbrt(r37070278);
double r37070280 = r37070279 * r37070279;
double r37070281 = r37070277 / r37070280;
double r37070282 = x;
double r37070283 = z;
double r37070284 = r37070283 * r37070283;
double r37070285 = fma(r37070282, r37070282, r37070284);
double r37070286 = fma(r37070268, r37070268, r37070285);
double r37070287 = r37070286 / r37070279;
double r37070288 = r37070281 * r37070287;
double r37070289 = sqrt(r37070288);
double r37070290 = r37070273 * r37070268;
double r37070291 = r37070276 ? r37070289 : r37070290;
double r37070292 = r37070270 ? r37070274 : r37070291;
return r37070292;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 37.2 |
|---|---|
| Target | 25.0 |
| Herbie | 25.3 |
if y < -2.2246552119313502e+105Initial program 54.8
Simplified54.8
rmApplied add-cube-cbrt54.8
Applied *-un-lft-identity54.8
Applied times-frac54.8
Taylor expanded around -inf 16.6
Simplified16.6
if -2.2246552119313502e+105 < y < 1.6755932361979678e+62Initial program 28.7
Simplified28.7
rmApplied add-cube-cbrt28.7
Applied *-un-lft-identity28.7
Applied times-frac28.8
if 1.6755932361979678e+62 < y Initial program 50.0
Simplified50.0
Taylor expanded around inf 21.2
Final simplification25.3
herbie shell --seed 2019179 +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)))