\sqrt{\frac{\left(x \cdot x + y \cdot y\right) + z \cdot z}{3.0}}\begin{array}{l}
\mathbf{if}\;y \le -3.397008026592871 \cdot 10^{+153}:\\
\;\;\;\;\frac{-y}{\sqrt{3.0}}\\
\mathbf{elif}\;y \le 6.86482775038648 \cdot 10^{+127}:\\
\;\;\;\;\sqrt{0.3333333333333333 \cdot \mathsf{fma}\left(y, y, \mathsf{fma}\left(z, z, x \cdot x\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{y}{\sqrt{3.0}}\\
\end{array}double f(double x, double y, double z) {
double r38356792 = x;
double r38356793 = r38356792 * r38356792;
double r38356794 = y;
double r38356795 = r38356794 * r38356794;
double r38356796 = r38356793 + r38356795;
double r38356797 = z;
double r38356798 = r38356797 * r38356797;
double r38356799 = r38356796 + r38356798;
double r38356800 = 3.0;
double r38356801 = r38356799 / r38356800;
double r38356802 = sqrt(r38356801);
return r38356802;
}
double f(double x, double y, double z) {
double r38356803 = y;
double r38356804 = -3.397008026592871e+153;
bool r38356805 = r38356803 <= r38356804;
double r38356806 = -r38356803;
double r38356807 = 3.0;
double r38356808 = sqrt(r38356807);
double r38356809 = r38356806 / r38356808;
double r38356810 = 6.86482775038648e+127;
bool r38356811 = r38356803 <= r38356810;
double r38356812 = 0.3333333333333333;
double r38356813 = z;
double r38356814 = x;
double r38356815 = r38356814 * r38356814;
double r38356816 = fma(r38356813, r38356813, r38356815);
double r38356817 = fma(r38356803, r38356803, r38356816);
double r38356818 = r38356812 * r38356817;
double r38356819 = sqrt(r38356818);
double r38356820 = r38356803 / r38356808;
double r38356821 = r38356811 ? r38356819 : r38356820;
double r38356822 = r38356805 ? r38356809 : r38356821;
return r38356822;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 35.4 |
|---|---|
| Target | 24.5 |
| Herbie | 24.1 |
if y < -3.397008026592871e+153Initial program 59.0
Simplified59.0
rmApplied sqrt-div59.0
Taylor expanded around -inf 14.7
Simplified14.7
if -3.397008026592871e+153 < y < 6.86482775038648e+127Initial program 27.2
Simplified27.2
Taylor expanded around 0 27.2
Simplified27.2
if 6.86482775038648e+127 < y Initial program 54.6
Simplified54.6
rmApplied sqrt-div54.6
Taylor expanded around inf 17.3
Final simplification24.1
herbie shell --seed 2019168 +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)))