这几天在作dsp程序的时候用到的,感觉还不错
V_UINT32 VSqrt3( V_UINT32 x ) //牛顿法
{
V_UINT32 x1;
int s = 1, g0,g1;
if (x <= 1) return x;
x1 = x - 1;
if ( x1 > 65535 )
{
s += 8;
x1 >>= 16;
}
if ( x1 > 255 )
{
s += 4;
x1 >>= 8;
}
if ( x1 > 15 )
{
s += 2;
x1 >>= 4;
}
if ( x1 > 3 )
{
s += 1;
}
g0 = 1 << s;
g1 = ( g0 + ( x >> s ) ) >> 1;
while ( g1 < g0 ) {
g0 = g1;
g1 = ( g0 + x/g0 ) >> 1;
}
return g0;
}