您的位置:首页 > 其它

高精度整数开根号算法

2012-02-14 11:52 148 查看
//高精度整数开根号算法

//假设被开方数为y(16位),而开方结果为x(8位),并且表示为一下格式:(32位开方类似)

//y = a15*2^15 + a14*2^14 +...+ a1*2^1 + a0*2^0;

//x = b7*2^7 + b6*2^6 + ... + b1*2^1 + b0^0;

unsigned int sqrt_int(unsigned int y)

{

unsigned int x,i,cmp,m,n,r,tmp;

x=0; //初始化根为0

r=y; //初始化余数为被开方数

m=r>>14; //初始化m = a31*2 + a30;

n=14; //初始化 n = 16 - 2*n;

if (m>=1) //确定根的最高位

{

x=1;

r=y-(x<<n);

}

for (i=0;i<7;i++)

{

n-=2; //32 - 2*n (n=2,3,4...)

x=x<<1;

cmp=((x<<1)+1)<<n; //递推公式

if(r>=cmp) //确定根在此位上为0还是1

{

x++; //根在此位上为1

r=r-cmp; //更新余数

}

}

return x;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐