数値(整数)の平方根(整数)を計算する最速の方法を探していました。私はウィキペディアでこの解決策に出くわしました。これは、数値の平方根(完全な平方の場合)または最も近い下の完全な平方の平方根(指定された数値が完全な平方でない場合)を見つけます。
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)
。誰かが私にこの部分を説明できますか?