c语言中32位表示,C语言中超过32位数据的开方

本文介绍了如何使用C语言实现针对32位和64位整数的平方根计算函数,通过逐位运算优化算法,适用于特定场景的数值计算。博客详细讲解了sqrt_32和sqrt_64的具体实现步骤和用法,适合程序员理解和应用。
摘要由CSDN通过智能技术生成

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));

原文:https://www.cnblogs.com/Tearsly/p/10880732.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值