我用arm处理器,请问如何通过定点运算实现较高执行效率的开根号运算?

xiezifang 2009-10-12 06:27:19
我用arm处理器 (nxp2300处理器),请问如何通过定点运算实现较高执行效率的开根号运算?
要求效率高点,能否通过简单点的移位等运算实现?



提前谢谢各位来帮我解答的人!


...全文
453 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackyjkchen 2009-10-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xiezifang 的回复:]
我看到有些算法根据牛顿迭代:x=x/2+a/2x收敛于x^2=a的根,每做一次精度大约加倍,但这个算法是基于浮点的,arm处理器不支持浮点,如何通过定点运算实现呢?
以下是带浮点的算法
double sqrt(double x) {
      double result = 1.5;    //初始值可以随机选,也可以根据你的应用选能最快收敛的
        double precise = 0.001; //精度
        while(true) {
          double d = (result + x / result) / 2;
          if (abs(result - d) < precise)
              break;
          result = d;
        }
        return (result) ;
}

[/Quote]

初中的代数教材还有么,扩展阅读里记得介绍过一个开根号的笔算算法,看能不能实现,这种算法都是数学家的工作了,你找找看有没有库之类的
xiezifang 2009-10-12
  • 打赏
  • 举报
回复
我看到有些算法根据牛顿迭代:x=x/2+a/2x收敛于x^2=a的根,每做一次精度大约加倍,但这个算法是基于浮点的,arm处理器不支持浮点,如何通过定点运算实现呢?
以下是带浮点的算法
double sqrt(double x) {
double result = 1.5; //初始值可以随机选,也可以根据你的应用选能最快收敛的
double precise = 0.001; //精度
while(true) {
double d = (result + x / result) / 2;
if (abs(result - d) < precise)
break;
result = d;
}
return (result) ;
}
jackyjkchen 2009-10-12
  • 打赏
  • 举报
回复
快速开根号算法挺复杂的,直接google百度都能找到,不是移位就能做到的

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧