适合32位及以下的单片机的开平方算法

本文探讨了在单片机环境下如何优化开平方根的算法,指出调用内置函数可能影响程序效率。作者提供了使用泰勒展开式和移位算法的两种方法,特别是针对整数开整数方根的快速算法,强调了这些优化对于提高单片机计算速度的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

你是不是觉得开平方直接调用C或Matlab内置sqrt就可以呢?这不是多此一举吗?

但是写单片机高速算法时,遇到你的算法周期总是快不起来呢?显示总卡屏呢?你机器总是很笨,反映不过来呢?没错,你的主体计算思路也许没错,就是卡在你调用的sqrt等函数上了,计算你的主体已经难以再精简了,那就有必要逐个有优化算法了.

比如:正余弦函数等,系统内置的都是泰勒展开式式计算

根据你需要选择合适的阶数嘛!非常正确,其它的呢?用泰勒原式嘛

没错,我们的开平方也可以用泰勒展开式计算

因此泰勒开平方根的代码如下:

// c++ code
double ans=1, pre=0;
while(abs(ans-pre)>1e-6)

{
    pre=ans;
    ans=(ans+x/ans)/2;
}

这个精度有点高,可以算,但是这个也不是最快嘛!

本笔者用我们单片机最擅长的移位算法,分别得出两周计算步数最少的开整数方根的算法:

sqrt1(unit16 data)//快速开方
{unit16  pbta;
pbta=data>>1;
while(pbta^2>data)
{pbta=pbta>>1;
}
while(pbta^2<data)
{pbta++;
}
return pbta;
}
//bitshit(num,n)

再次申明,此算法仅仅适合于整数开整数方根,对精度要求高的高手,请用前面的算法.

解释权归"外号:十大爷",哈哈.

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值