\sqrt{\frac{\left(x \cdot x + y \cdot y\right) + z \cdot z}{3.0}}\begin{array}{l}
\mathbf{if}\;y \le -2.0527597390065202 \cdot 10^{+155}:\\
\;\;\;\;\frac{\frac{-y}{\left|\sqrt[3]{3.0}\right|}}{\sqrt{\sqrt[3]{3.0}}}\\
\mathbf{elif}\;y \le 2.938087940417542 \cdot 10^{+109}:\\
\;\;\;\;\sqrt{\frac{z \cdot z + \left(x \cdot x + y \cdot y\right)}{3.0}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\frac{y}{\sqrt[3]{\left|\sqrt[3]{3.0}\right|} \cdot \sqrt[3]{\left|\sqrt[3]{3.0}\right|}}}{\sqrt[3]{\left|\sqrt[3]{3.0}\right|}}}{\sqrt{\sqrt[3]{3.0}}}\\
\end{array}double f(double x, double y, double z) {
double r43472125 = x;
double r43472126 = r43472125 * r43472125;
double r43472127 = y;
double r43472128 = r43472127 * r43472127;
double r43472129 = r43472126 + r43472128;
double r43472130 = z;
double r43472131 = r43472130 * r43472130;
double r43472132 = r43472129 + r43472131;
double r43472133 = 3.0;
double r43472134 = r43472132 / r43472133;
double r43472135 = sqrt(r43472134);
return r43472135;
}
double f(double x, double y, double z) {
double r43472136 = y;
double r43472137 = -2.0527597390065202e+155;
bool r43472138 = r43472136 <= r43472137;
double r43472139 = -r43472136;
double r43472140 = 3.0;
double r43472141 = cbrt(r43472140);
double r43472142 = fabs(r43472141);
double r43472143 = r43472139 / r43472142;
double r43472144 = sqrt(r43472141);
double r43472145 = r43472143 / r43472144;
double r43472146 = 2.938087940417542e+109;
bool r43472147 = r43472136 <= r43472146;
double r43472148 = z;
double r43472149 = r43472148 * r43472148;
double r43472150 = x;
double r43472151 = r43472150 * r43472150;
double r43472152 = r43472136 * r43472136;
double r43472153 = r43472151 + r43472152;
double r43472154 = r43472149 + r43472153;
double r43472155 = r43472154 / r43472140;
double r43472156 = sqrt(r43472155);
double r43472157 = cbrt(r43472142);
double r43472158 = r43472157 * r43472157;
double r43472159 = r43472136 / r43472158;
double r43472160 = r43472159 / r43472157;
double r43472161 = r43472160 / r43472144;
double r43472162 = r43472147 ? r43472156 : r43472161;
double r43472163 = r43472138 ? r43472145 : r43472162;
return r43472163;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 35.6 |
|---|---|
| Target | 24.8 |
| Herbie | 24.6 |
if y < -2.0527597390065202e+155Initial program 59.3
rmApplied sqrt-div59.3
rmApplied add-cube-cbrt59.3
Applied sqrt-prod59.3
Applied associate-/r*59.3
Simplified59.3
Taylor expanded around -inf 15.9
Simplified15.9
if -2.0527597390065202e+155 < y < 2.938087940417542e+109Initial program 27.5
if 2.938087940417542e+109 < y Initial program 51.2
rmApplied sqrt-div51.2
rmApplied add-cube-cbrt51.2
Applied sqrt-prod51.2
Applied associate-/r*51.2
Simplified51.2
Taylor expanded around inf 19.0
rmApplied add-cube-cbrt19.0
Applied associate-/r*19.1
Final simplification24.6
herbie shell --seed 2019165
(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)))