DSP

整数平方根算法

2019-07-13 17:38发布

这几天在作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;
}