码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-05-17 13:32:16      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:+=   tmp   整数   sqrt   bsp   ++   nbsp   程序   return   

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位数据平方后开方的程序

标签:+=   tmp   整数   sqrt   bsp   ++   nbsp   程序   return   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!