1 UINT sqrt(long m) 2 { 3 4 BYTE i,j; 5 UINT z,temp0,temp1; 6 long x,y; 7 x = 1; 8 9 for(j =0;j<16;j++) 10 { 11 x <<= 2; 12 if(m<x) 13 break; 14 } 15 x = y =1; 16 x <<=2*j; 17 y = x<<1; 18 19 z = 0; 20 temp0 = 0; 21 for(i=0;i<=j;i++) 22 { 23 z <<= 1; 24 temp0 <<= 2; 25 if(m&x) 26 temp0++; 27 if(m&y) 28 temp0 += 0x02; 29 m <<= 2; 30 temp1 = z; 31 temp1 = (temp1<<1) + 1; 32 if(temp1<=temp0) 33 { 34 temp0 -=temp1; 35 z++; 36 } 37 } 38 39 return z; 40 41 }
算法原理不是很清楚,但确实管用,开平方的值只精确到个位,误差最大为1。哪位大神明白的给指点下。
原文:http://www.cnblogs.com/10cm/p/3922398.html