2
비트 시프트에 의한 빠른 제곱근 알고리즘을 연구 중입니다. 나는 위키피디아의 코드에 매료되었다.비트 시프트에 의한 제곱근
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; 왜 입술을 2로 나눠야하나요? 누구든지이 문제에 대해 밝힐 수 있습니까? 감사!
'>> 의해 분할 수를 1'비트 단위 우측 시프트, 예를 들어은 "2로 나눈다". '>> 2'는 4로 나누고, >> >> n은 "2로 나누기 ** ** (n)" –
res가 2로 나눈 이유를 설명 할 수 있습니까? – csrfengye
여기에 당신은 당신의 질문 http://stackoverflow.com/questions/10866119/what-is-the-fastest-way-to-find-integer-square-root-using-bit-shifts에 대한 설명을 찾을 수 있습니까? rq = 1 – Rd7