打印
[应用方案]

单片机快速开平方的

[复制链接]
1211|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
rosemoore|  楼主 | 2024-11-18 15:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
算法1基于位操作,其基本思想类似于人类手动计算开平方的过程。我们将待开平方的数字拆分为二进制形式。设x是待开平方的数,x=10*p+q,其中p是已知部分,q是未知部分。通过公式q=(x^2-100*p^2)/(20*p+q)来迭代求解q。在二进制下,公式简化为q=(x^2-4*p^2)/(4*p+q)。算法的核心是不断地调整q的值,使得余数最小,直至找到最接近的q值。在C语言中,可以编写如下程序:

```c
unsigned short sqrt(unsigned long a){
unsigned long rem = 0;
unsigned long root = 0;
unsigned long pisor = 0;
for(int i=0; i<16; i++){
root <<= 1;
rem = ((rem << 2) + (a >> 30));
a <<= 2;
pisor = (root<<1) + 1;
if(pisor <= rem){
rem -= pisor;
root++;
}
}
return (unsigned short)(root);
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

59

主题

1363

帖子

2

粉丝