C语言编程 开方,C语言中32位数据平方后开方的程序

uint32_t sqrt_32(uint32_t M)

{

uint32_t N, i;

uint32_t tmp, ttp;

if (M == 0)

{

return 0;

}

N = 0;

tmp = (M >> 30);

M <<= 2;

if(tmp > 1)

{

N++;

tmp -= N;

}

for (i = 15; i > 0; i--)

{

N <<= 1;

tmp <<= 2;

tmp += (M >> 30);

ttp = N;

ttp = (ttp << 1) + 1;

M <<= 2;

if (tmp >= ttp)

{

tmp -= ttp;

N++;

}

}

return N;

}

//H是64位整数的高32位,L是64位整数的低32位

uint32_t sqrt_64(uint32_t h, uint32_t l)

{

uint32_t N, i;

uint32_t tmp, ttp;

if (h == 0)

{

return sqrt_32(l);

}

else

{

N = 0;

tmp = (h >> 30);

h <<= 2;

if (tmp > 1)

{

N++;

tmp -= N;

}

for (i = 15; i > 0; i--)

{

N <<= 1;

tmp <<= 2;

tmp += (h >> 30);

ttp = N;

ttp = (ttp << 1) + 1;

h <<= 2;

if (tmp >= ttp)

{

tmp -= ttp;

N++;

}

}

for (i = 16; i > 0; i--)

{

N <<= 1;

tmp <<= 2;

tmp += (l >> 30);

ttp = N;

ttp = (ttp << 1) + 1;

l <<= 2;

if (tmp >= ttp)

{

tmp -= ttp;

N++;

}

}

return N;

}

}

用法:

uint64_t  a=9999999800000001;

uint32_t  B= 0;

B = sqrt_64(((a>>32)&0xFFFFFFFF),(a&0xFFFFFFFF));

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值