平方根移位

时间:2013-03-21 20:41:16

标签: bit-shift square-root

我正在通过位移研究快速平方根算法。我被维基百科的代码所困扰。

short isqrt(short num) {
    short res = 0;
    short bit = 1 << 14; // The second-to-top bit is set: 1L<<30 for long

    // "bit" starts at the highest power of four <= the argument.
    while (bit > num)
        bit >>= 2;

    while (bit != 0) {
        if (num >= res + bit) {
            num -= res + bit;
            res = (res >> 1) + bit;
        }
        else
            res >>= 1;
        bit >>= 2;
    }
    return res;
}

我知道它可以产生正确的结果,但它是如何产生的呢?这句话我特别困惑, res =(res&gt;&gt; 1)+ bit; 为什么res应该除以2? 任何人都可以对此有所了解吗?谢谢!

1 个答案:

答案 0 :(得分:-3)

右移1位将数字除以2。