5

ビットシフトによる高速な平方根アルゴリズムを研究しています。ウィキペディアのコードに行き詰まりました。

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 >> 1) + bit; という文には特に困惑しています。ここで res を 2 で割る必要があるのはなぜですか? 誰でもこれに光を当てることができますか?感謝!

4

0 に答える 0