64位数开根号c语言,平方根的C语言实现(三) ——最终程序实现

本文介绍了如何使用C语言实现64位整数的平方根,通过手算平方根原理编写程序,并提供了一个完整的64位整数平方根的实现。同时,文章还涉及了浮点数的平方根计算,包括规格化数值的平方根,通过调整代码实现了浮点数的平方根,并进行了测试以确保结果的准确性。
摘要由CSDN通过智能技术生成

了解了浮点数的存储以及手算平方根的原理,我们可以考虑程序实现了。

先实现一个64位整数的平方根,根据之前的手算平方根,程序也不是那么难写了。

#include

uint64_t _sqrt_u64(uint64_t a)

{

int i;

uint64_t res;

uint64_t remain;

//0的平方根是0,特殊处理一下

if(a == 0ull)

return 0ull;

//找到最高位的1,并且产生平方根结果最高位的1

for(i=62;;i-=2)

if(a&(3ull<

res = 1ull;

remain = ((a&(3ull<>i) - 1ull;

i -= 2;

break;

}

//根据手算平方根的原理,依次产生各位结果

for(;i>=0;i-=2) {

//右移动两位,并把a接着的两位并入remain

remain = (remain<<2)|((a&(3ull<>i);

if(((res<<2)|1ull) <= remain) {

//产生新一位的1

remain = remain - ((res<<2)|1ull);

res = (res<<1)|1ull;

} else {

//产生新一位的0

res <<= 1;

}

}

return res;

}

其实,可以合在一起写,代码会短一些,但效率会低那么一点点,而且编译器应该不太容易优化。

#include

uint64_t _sqrt_u64(uint64_t a)

{

int i;

uint64_t res;

uint64_t remain;

res = remain = 0ull;

for(i=62;i>=0;i-=2) {

remain = (remain<<2)|((a&(3ull<>i);

if(((res<<2)|1ull) <= remain) {

remain = remain - ((res<<2)|1ull);

res = (res<<1)|1ull;

} else {

res <<= 1;

}

}

return res;

}

不过,我们不需要这个结果。

为了验证其正确性,我们来写个C语言的main

#include

#include

#include

ui

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值