\sqrt{\frac{\left(x \cdot x + y \cdot y\right) + z \cdot z}{3.0}}\begin{array}{l}
\mathbf{if}\;x \le -6.208442960829875 \cdot 10^{+137}:\\
\;\;\;\;\left(-x\right) \cdot \sqrt{0.3333333333333333}\\
\mathbf{elif}\;x \le -1.9111814054112648 \cdot 10^{-98}:\\
\;\;\;\;\sqrt{z \cdot z + \left(y \cdot y + x \cdot x\right)} \cdot \sqrt{\frac{1}{3.0}}\\
\mathbf{elif}\;x \le -8.598460374864875 \cdot 10^{-202}:\\
\;\;\;\;\sqrt{0.3333333333333333} \cdot z\\
\mathbf{elif}\;x \le 9.794009169674087 \cdot 10^{+109}:\\
\;\;\;\;\sqrt{z \cdot z + \left(y \cdot y + x \cdot x\right)} \cdot \sqrt{\frac{1}{3.0}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt{0.3333333333333333} \cdot x\\
\end{array}double f(double x, double y, double z) {
double r43333667 = x;
double r43333668 = r43333667 * r43333667;
double r43333669 = y;
double r43333670 = r43333669 * r43333669;
double r43333671 = r43333668 + r43333670;
double r43333672 = z;
double r43333673 = r43333672 * r43333672;
double r43333674 = r43333671 + r43333673;
double r43333675 = 3.0;
double r43333676 = r43333674 / r43333675;
double r43333677 = sqrt(r43333676);
return r43333677;
}
double f(double x, double y, double z) {
double r43333678 = x;
double r43333679 = -6.208442960829875e+137;
bool r43333680 = r43333678 <= r43333679;
double r43333681 = -r43333678;
double r43333682 = 0.3333333333333333;
double r43333683 = sqrt(r43333682);
double r43333684 = r43333681 * r43333683;
double r43333685 = -1.9111814054112648e-98;
bool r43333686 = r43333678 <= r43333685;
double r43333687 = z;
double r43333688 = r43333687 * r43333687;
double r43333689 = y;
double r43333690 = r43333689 * r43333689;
double r43333691 = r43333678 * r43333678;
double r43333692 = r43333690 + r43333691;
double r43333693 = r43333688 + r43333692;
double r43333694 = sqrt(r43333693);
double r43333695 = 1.0;
double r43333696 = 3.0;
double r43333697 = r43333695 / r43333696;
double r43333698 = sqrt(r43333697);
double r43333699 = r43333694 * r43333698;
double r43333700 = -8.598460374864875e-202;
bool r43333701 = r43333678 <= r43333700;
double r43333702 = r43333683 * r43333687;
double r43333703 = 9.794009169674087e+109;
bool r43333704 = r43333678 <= r43333703;
double r43333705 = r43333683 * r43333678;
double r43333706 = r43333704 ? r43333699 : r43333705;
double r43333707 = r43333701 ? r43333702 : r43333706;
double r43333708 = r43333686 ? r43333699 : r43333707;
double r43333709 = r43333680 ? r43333684 : r43333708;
return r43333709;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 35.0 |
|---|---|
| Target | 23.5 |
| Herbie | 25.6 |
if x < -6.208442960829875e+137Initial program 56.2
Taylor expanded around -inf 15.3
Simplified15.3
if -6.208442960829875e+137 < x < -1.9111814054112648e-98 or -8.598460374864875e-202 < x < 9.794009169674087e+109Initial program 27.1
rmApplied div-inv27.1
Applied sqrt-prod27.2
if -1.9111814054112648e-98 < x < -8.598460374864875e-202Initial program 28.2
Taylor expanded around 0 46.7
if 9.794009169674087e+109 < x Initial program 52.0
Taylor expanded around inf 16.8
Final simplification25.6
herbie shell --seed 2019158
(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)))