\sqrt{\frac{\left(x \cdot x + y \cdot y\right) + z \cdot z}{3}}\begin{array}{l}
\mathbf{if}\;x \le -4.24117253240271209 \cdot 10^{119}:\\
\;\;\;\;-1 \cdot \frac{x}{\sqrt{3}}\\
\mathbf{elif}\;x \le 6.6019422836665007 \cdot 10^{109}:\\
\;\;\;\;\sqrt{0.333333333333333315 \cdot \left(\left(x \cdot x + y \cdot y\right) + z \cdot z\right)}\\
\mathbf{else}:\\
\;\;\;\;x \cdot \sqrt{0.333333333333333315}\\
\end{array}double f(double x, double y, double z) {
double r962097 = x;
double r962098 = r962097 * r962097;
double r962099 = y;
double r962100 = r962099 * r962099;
double r962101 = r962098 + r962100;
double r962102 = z;
double r962103 = r962102 * r962102;
double r962104 = r962101 + r962103;
double r962105 = 3.0;
double r962106 = r962104 / r962105;
double r962107 = sqrt(r962106);
return r962107;
}
double f(double x, double y, double z) {
double r962108 = x;
double r962109 = -4.241172532402712e+119;
bool r962110 = r962108 <= r962109;
double r962111 = -1.0;
double r962112 = 3.0;
double r962113 = sqrt(r962112);
double r962114 = r962108 / r962113;
double r962115 = r962111 * r962114;
double r962116 = 6.601942283666501e+109;
bool r962117 = r962108 <= r962116;
double r962118 = 0.3333333333333333;
double r962119 = r962108 * r962108;
double r962120 = y;
double r962121 = r962120 * r962120;
double r962122 = r962119 + r962121;
double r962123 = z;
double r962124 = r962123 * r962123;
double r962125 = r962122 + r962124;
double r962126 = r962118 * r962125;
double r962127 = sqrt(r962126);
double r962128 = sqrt(r962118);
double r962129 = r962108 * r962128;
double r962130 = r962117 ? r962127 : r962129;
double r962131 = r962110 ? r962115 : r962130;
return r962131;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 37.8 |
|---|---|
| Target | 25.5 |
| Herbie | 25.7 |
if x < -4.241172532402712e+119Initial program 56.8
rmApplied add-sqr-sqrt56.8
Applied add-sqr-sqrt56.8
Applied times-frac56.8
Taylor expanded around -inf 18.1
if -4.241172532402712e+119 < x < 6.601942283666501e+109Initial program 29.3
Taylor expanded around 0 29.3
Simplified29.3
if 6.601942283666501e+109 < x Initial program 55.9
Taylor expanded around inf 17.7
Final simplification25.7
herbie shell --seed 2020060
(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.396479394109776e+136) (/ (- z) (sqrt 3)) (if (< z 7.320293694404182e+117) (/ (sqrt (+ (+ (* z z) (* x x)) (* y y))) (sqrt 3)) (* (sqrt 0.3333333333333333) z)))
(sqrt (/ (+ (+ (* x x) (* y y)) (* z z)) 3)))