\sqrt{\frac{\left(x \cdot x + y \cdot y\right) + z \cdot z}{3}}\begin{array}{l}
\mathbf{if}\;y \le -8.482917924797483679712647688226368282521 \cdot 10^{119}:\\
\;\;\;\;y \cdot \left(-\sqrt{0.3333333333333333148296162562473909929395}\right)\\
\mathbf{elif}\;y \le -1.641898882548598243013797171058025073649 \cdot 10^{-140}:\\
\;\;\;\;\left|\frac{\sqrt{\left(z \cdot z + x \cdot x\right) + y \cdot y}}{\sqrt{3}}\right|\\
\mathbf{elif}\;y \le 1.905941665788049680441607306162017688087 \cdot 10^{-142}:\\
\;\;\;\;\left|\frac{z}{\sqrt{3}}\right|\\
\mathbf{elif}\;y \le 3.650529274743424126022624456719780516428 \cdot 10^{93}:\\
\;\;\;\;\sqrt{\left({y}^{2} + z \cdot z\right) + x \cdot x} \cdot \sqrt{\frac{1}{3}}\\
\mathbf{else}:\\
\;\;\;\;\left|\frac{-y}{\sqrt{3}}\right|\\
\end{array}double f(double x, double y, double z) {
double r567376 = x;
double r567377 = r567376 * r567376;
double r567378 = y;
double r567379 = r567378 * r567378;
double r567380 = r567377 + r567379;
double r567381 = z;
double r567382 = r567381 * r567381;
double r567383 = r567380 + r567382;
double r567384 = 3.0;
double r567385 = r567383 / r567384;
double r567386 = sqrt(r567385);
return r567386;
}
double f(double x, double y, double z) {
double r567387 = y;
double r567388 = -8.482917924797484e+119;
bool r567389 = r567387 <= r567388;
double r567390 = 0.3333333333333333;
double r567391 = sqrt(r567390);
double r567392 = -r567391;
double r567393 = r567387 * r567392;
double r567394 = -1.6418988825485982e-140;
bool r567395 = r567387 <= r567394;
double r567396 = z;
double r567397 = r567396 * r567396;
double r567398 = x;
double r567399 = r567398 * r567398;
double r567400 = r567397 + r567399;
double r567401 = r567387 * r567387;
double r567402 = r567400 + r567401;
double r567403 = sqrt(r567402);
double r567404 = 3.0;
double r567405 = sqrt(r567404);
double r567406 = r567403 / r567405;
double r567407 = fabs(r567406);
double r567408 = 1.9059416657880497e-142;
bool r567409 = r567387 <= r567408;
double r567410 = r567396 / r567405;
double r567411 = fabs(r567410);
double r567412 = 3.650529274743424e+93;
bool r567413 = r567387 <= r567412;
double r567414 = 2.0;
double r567415 = pow(r567387, r567414);
double r567416 = r567415 + r567397;
double r567417 = r567416 + r567399;
double r567418 = sqrt(r567417);
double r567419 = 1.0;
double r567420 = r567419 / r567404;
double r567421 = sqrt(r567420);
double r567422 = r567418 * r567421;
double r567423 = -r567387;
double r567424 = r567423 / r567405;
double r567425 = fabs(r567424);
double r567426 = r567413 ? r567422 : r567425;
double r567427 = r567409 ? r567411 : r567426;
double r567428 = r567395 ? r567407 : r567427;
double r567429 = r567389 ? r567393 : r567428;
return r567429;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 38.1 |
|---|---|
| Target | 25.4 |
| Herbie | 26.0 |
if y < -8.482917924797484e+119Initial program 58.3
Simplified58.3
rmApplied *-un-lft-identity58.3
Applied add-sqr-sqrt58.3
Applied times-frac58.3
Applied sqrt-prod58.4
Simplified58.4
Simplified58.4
Taylor expanded around -inf 18.5
Simplified18.5
if -8.482917924797484e+119 < y < -1.6418988825485982e-140Initial program 28.5
Simplified28.5
rmApplied add-sqr-sqrt28.6
Applied add-sqr-sqrt28.6
Applied times-frac28.6
Applied rem-sqrt-square28.6
if -1.6418988825485982e-140 < y < 1.9059416657880497e-142Initial program 31.4
Simplified31.4
rmApplied add-sqr-sqrt31.6
Applied add-sqr-sqrt31.6
Applied times-frac31.5
Applied rem-sqrt-square31.5
Taylor expanded around 0 31.3
if 1.9059416657880497e-142 < y < 3.650529274743424e+93Initial program 27.8
Simplified27.8
rmApplied div-inv27.9
Applied sqrt-prod27.9
Simplified27.9
if 3.650529274743424e+93 < y Initial program 53.8
Simplified53.8
rmApplied add-sqr-sqrt53.9
Applied add-sqr-sqrt53.9
Applied times-frac53.8
Applied rem-sqrt-square53.8
Taylor expanded around -inf 19.2
Simplified19.2
Final simplification26.0
herbie shell --seed 2019196
(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)))