我正在尋找最快的方法來計算一個數字(整數)的平方根(整數)。使用位移查找整數平方根的最快方法是什麼?
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)
內部的部分。有人可以向我解釋這部分嗎?