- 注册时间
- 2004-8-30
- 最后登录
- 1970-1-1
|
发表于 2005-2-18 17:23:00
|
显示全部楼层
以前在天空城发过的一张帖子,作者不记得了。可以计算开平方。
int sqrt(long M)
{
int N, i;
long tmp, ttp; // 结果、循环计数
if(M==0) // 被开方数,开方结果也为0
return 0;
N=0;
tmp =(M>>30); // 获取最高位:B[m-1]
M=M<<2;
if(tmp > 1) // 最高位为1
{
N++; // 结果当前位为1,否则为默认的0
tmp=tmp-N;
}
for(i=15;i>0;i--) // 求剩余的15位
{
N=N<<1; // 左移一位
tmp=tmp<<2;
tmp=tmp+(-(M<0))*2+((M&0x7fffffff)>>30); // 假设
ttp=N;
ttp=(ttp<<1)+1;
M=M<<2;
if(tmp>=ttp) // 假设成立
{
tmp=tmp-ttp;
N++;
}
}
return N;
}
void main()
{
int t;
t=sqrt(50000000);
printf("50000000^1/2=%d",t);
getchar();
} |
|