숫자 (정수)의 제곱근 (정수)을 계산하는 가장 빠른 방법을 찾고있었습니다.비트 쉬프트를 사용하여 정수 제곱근을 찾는 가장 빠른 방법은 무엇입니까?
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)
부분을 이해할 수없는 것 같습니다.