\sqrt{\frac{\left(x \cdot x + y \cdot y\right) + z \cdot z}{3}}\begin{array}{l}
\mathbf{if}\;x \le -18637040731758232623605069933264714596350:\\
\;\;\;\;-1 \cdot \frac{x}{\sqrt{3}}\\
\mathbf{elif}\;x \le 4.376373199179285827713056036389642308458 \cdot 10^{91}:\\
\;\;\;\;\sqrt{\frac{6004799503160661}{18014398509481984} \cdot \left({x}^{2} + \left({y}^{2} + {z}^{2}\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;x \cdot \sqrt{\frac{6004799503160661}{18014398509481984}}\\
\end{array}double f(double x, double y, double z) {
double r544291 = x;
double r544292 = r544291 * r544291;
double r544293 = y;
double r544294 = r544293 * r544293;
double r544295 = r544292 + r544294;
double r544296 = z;
double r544297 = r544296 * r544296;
double r544298 = r544295 + r544297;
double r544299 = 3.0;
double r544300 = r544298 / r544299;
double r544301 = sqrt(r544300);
return r544301;
}
double f(double x, double y, double z) {
double r544302 = x;
double r544303 = -1.8637040731758233e+40;
bool r544304 = r544302 <= r544303;
double r544305 = -1.0;
double r544306 = 3.0;
double r544307 = sqrt(r544306);
double r544308 = r544302 / r544307;
double r544309 = r544305 * r544308;
double r544310 = 4.376373199179286e+91;
bool r544311 = r544302 <= r544310;
double r544312 = 6004799503160661.0;
double r544313 = 18014398509481984.0;
double r544314 = r544312 / r544313;
double r544315 = 2.0;
double r544316 = pow(r544302, r544315);
double r544317 = y;
double r544318 = pow(r544317, r544315);
double r544319 = z;
double r544320 = pow(r544319, r544315);
double r544321 = r544318 + r544320;
double r544322 = r544316 + r544321;
double r544323 = r544314 * r544322;
double r544324 = sqrt(r544323);
double r544325 = sqrt(r544314);
double r544326 = r544302 * r544325;
double r544327 = r544311 ? r544324 : r544326;
double r544328 = r544304 ? r544309 : r544327;
return r544328;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 38.2 |
|---|---|
| Target | 25.7 |
| Herbie | 26.4 |
if x < -1.8637040731758233e+40Initial program 49.0
rmApplied add-sqr-sqrt49.0
Applied associate-/r*49.0
Taylor expanded around -inf 23.5
if -1.8637040731758233e+40 < x < 4.376373199179286e+91Initial program 29.7
Taylor expanded around 0 29.7
Simplified29.7
if 4.376373199179286e+91 < x Initial program 53.4
Taylor expanded around inf 18.9
Simplified18.9
Final simplification26.4
herbie shell --seed 2019304
(FPCore (x y z)
:name "Data.Array.Repa.Algorithms.Pixel:doubleRmsOfRGB8 from repa-algorithms-3.4.0.1"
:precision binary64
:herbie-target
(if (< z -6.3964793941097758e136) (/ (- z) (sqrt 3)) (if (< z 7.3202936944041821e117) (/ (sqrt (+ (+ (* z z) (* x x)) (* y y))) (sqrt 3)) (* (sqrt 0.333333333333333315) z)))
(sqrt (/ (+ (+ (* x x) (* y y)) (* z z)) 3)))