unsigned long sqt1(unsigned long temp) { unsigned long A = 0, B = 0, C = 0, D = temp, K = 0, L = 0x40000000; do{ A = B + L; B >>= 1; if(A <= D) { D -= A; B += L; } L >>= 2; } while(L); //根据数据长度循环N次 if(D > B) B++; //小数处理 return B; }
被开方数D L(16进制) 2字节16位 0x4000 18位 0x10000 20位 0x40000 22位 0x100000 3字节24位 0x400000 4字节32位 0x40000000 ......以此类推. 即:L与D长度相同时,次高位为1,其余为0.