首页 > 编程语言 > 详细

C语言中超过32位数据的开方

时间:2019-05-17 13:08:42      阅读:358      评论:0      收藏:0      [点我收藏+]

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

C语言中超过32位数据的开方

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!