Каков самый быстрый способ найти квадратный корень целого числа с помощью битовых сдвигов?

Я искал самый быстрый метод для вычисления квадратного корня (целого числа) числа (целого числа). Я пришел через это решение в Википедии, которое находит квадратный корень числа (если это идеальный квадрат) или квадратный корень из его ближайшего нижнего идеального квадрата (если данное число не является идеальным квадратом:

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;
}

я пробовал много тестов работает, чтобы отследить алгоритм, но я, кажется, не понимаю часть внутри while(bit!=0). Кто-нибудь может объяснить мне эту часть?

6
задан Jerry Coffin 2 June 2012 в 21:47
поделиться