单片机计算圆周,PI应该取多少?

[复制链接]
5005|22
 楼主| pilieren 发表于 2007-11-26 11:04 | 显示全部楼层 |阅读模式
    在一个程序设计中需要根据直径(半径)大小,算出总里程及运动速度,这里半径可以设定精确到mm,此时计算圆周---〉里程及速度,想不清楚 PI (圆周率)应该取多少??!
    取 3 的话误差是不是过大?取3.14 浮点运算是不是过于麻烦(小题大做)以及51实现是不是太繁琐?!!
    还是一般取3就可以了???
    请各位大虾指教!!
    谢谢!!
HWM 发表于 2007-11-26 11:07 | 显示全部楼层

如果你想“毛估估”,就没问题,呵呵。

wlm802003 发表于 2007-11-26 12:01 | 显示全部楼层

先将PI放大N倍,算出结果后再除N倍

HWM 发表于 2007-11-26 12:05 | 显示全部楼层

楼上:你不怕乘“爆”了吗?

还是用浮点运算吧。
xwj 发表于 2007-11-26 12:44 | 显示全部楼层

当然不能太"毛"了

扩展乘除法的位数,就不怕乘“爆”了
就算这样慢一点,但还是要比浮点运算快得多
ldyeah 发表于 2007-11-26 12:47 | 显示全部楼层

取3的误差大了电吧

用浮点数吧
ayb_ice 发表于 2007-11-26 14:18 | 显示全部楼层

用先X一个整数,再除以一个整数。。。

X/X约=PI。。。
forthlab 发表于 2007-11-26 15:15 | 显示全部楼层

用3.14*128,然后结果再截位

xwj 发表于 2007-11-26 15:26 | 显示全部楼层

唉,笨死了

谁让你每次都去算的啊?
你就不能设置时算一次,以后就用算好的结果来加吗???

就算非要每次都计算,单片机的速度比人算也快多了,根本就感觉不到延迟的
5880527 发表于 2007-11-26 21:37 | 显示全部楼层
ywqywqywq 发表于 2007-11-26 22:00 | 显示全部楼层

取祖冲之的密率

355/113
这个分数的精度很高,就是不知道你作除法是否方便。
yanfengzhu 发表于 2007-11-26 22:25 | 显示全部楼层

楼上的实现可取。

一无所知 发表于 2007-11-27 16:25 | 显示全部楼层

PI的精度由你的需求所决定~

    你现在是通过半径来求,里程和速度。如果半径已经固定了。那么只要知道里程的精度和速度的精度,那么就可以根据这个来到推出你的PI的取值范围在多少才能保证你的精度了。
    然后剩下的事情,是在保证你的精度的前提下,来优化你的算法。
    
    所以~~你的里程和速度的精度是多少啊?
    5%? 1% ? 还是0.5%?
    
    换句土一点的话说,你算出来的里程数和实际的里程数,所允许或是容忍的相差范围是多少啊?
   
    假设你在计算中用一个系数K来代替PI(这个K值由您来定,可以是3,可以是3.14,更可以是355/113)。
    那么通过小学的计算我们可以得到下面两个式子
    一个是实际里程S=2PIR
    一个是计算里程S1=2KR

    那么,你只要通过调整K值,使|S1-S|/S的值是落在在您的精度内就可以了
    貌似我觉得3就够了。   
happystar 发表于 2007-11-27 19:14 | 显示全部楼层

re

记得匠人那边有个“外星人”算法,嘿嘿,一点也看不懂
IceAge 发表于 2007-11-27 23:36 | 显示全部楼层

3.1415927 * 16384

 = 51472  ( 3.1416 )  

Diameter * PI  --> (Diameter  * 51472) >> 14 

milk_wong 发表于 2007-11-27 23:45 | 显示全部楼层

51都这么做吧...

3.141592654 = 2 + 1 + 1/8 + 1/64 + ....

x = (x << 1) + x + (x >> 3) + (x >> 6) + ...
hotpower 发表于 2007-11-28 00:45 | 显示全部楼层

学习学习~~~

IceAge早安~~~
computer00 发表于 2007-11-28 00:53 | 显示全部楼层

3.1416*10000 =31416

例如半径为1米,那么周长为:

2*1*31416=62832,你自己心里知道结果是6.2832米就行了,实际上这个就是一个定点小数。


如果结果只保留整数部分的话,放大倍数改成2的n次方比较快,最后的结果直接用移位即可得。
xwj 发表于 2007-11-28 03:09 | 显示全部楼层

16楼的计算方法很好!

 milk_wong 发表于 2007-11-27 23:45 侃单片机 ←返回版面    

16楼: 51都这么做吧... 

3.141592654 = 2 + 1 + 1/8 + 1/64 + ....

x = (x << 1) + x + (x >> 3) + (x >> 6) + ... 
 


实际上对于人机交互,随便什么方法都可以,先做出来再说!
毕竟对于计算人比电脑慢太多了
5880527 发表于 2007-11-28 09:41 | 显示全部楼层

11楼的355/113这个精度很高很高了

我一般取201/64,这个精度也很好,先做完所有的乘法再除64
您需要登录后才可以回帖 登录 | 注册

本版积分规则

74

主题

237

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部