毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> 嵌入式 >> 正文

单片机能不能用来求圆周率pi

更新时间:2012-12-17:  来源:毕业论文

单片机能不能用来求圆周率pi
最近接个任务,说用单片机(C8051f340)求π,而且还要一位一位地输出,但是单片机本身ram就很小,用不了大数组,而且浮点运算能力也很差,怎么能用来求π呢?求大神指正!!!!
因为PI的值你可以用计算机算啊,你把结果存在ROM中,然后输出,128K的ROM你可以存120K位多,超过10万位,应该够了

任务的描述是求π的程序烧到单片机上,然后结果用串口输出,中间变量用eeprom存取,也就是说单片机做运算,而不是计算机来做。不过,还是十分感谢三楼的回答。
我想知道的是,求π(不限精度)有没有那种能在单片机上就完成的算法,不限精度,但是中间变量的存储空间受限,而且浮点运算不推荐,其中已经求出的π的前几位的值无需保存,用串口输出去就可以了

char *pi = "3.1415926.....".

pi[0],pi[1]...

目前PI有2种算法,一种是正多边形逼近,另一种是随机数.我没做过所以不知道具体怎么做,楼主网上搜索一下,正多边形逼近这个好理解算法应该简单点

第三个比较怪异的方法是我在网上看到的,据说某一年The International Obfuscated C Code Contest(国际模糊C代码大赛)上的获奖作品
long a=10000, b, c=2800, d, e, f[2801], g;    main {    for(;b-c;) f[b ]=a/5;      for(;d=0,g=c*2;c-=14,printf("%.4d",e d/a),e=d%a)       {         for(b=c; d =f*a, f=d%--g, d/=g--, --b; d*=b); scanf("%s");       } }

关于pi的算法,我没有研究过,不过对于你说的2000*10000溢出问题,我倒是有个见解:那是我们以前在4位的单片机上实现10位10进制加减乘除,也就是计算器功能的做法,不把数据当数据,而是把数据当数组,然后用我们小学学过的竖式算法计算,就是在草稿纸上算乘法的那种算法,为了简单起见,我都是用倒序的方法存的数据。
char num1[5]={0,0,0,2,0}; //2000 j char num2[5]={0,0,0,0,1}; //10000 i  char result[10]; //结果10位,以上都是倒序 char temp[10]; int i,j; memset(result,0,10); for(i = 0; i < 5; i++) {     memset(temp,0,10);     for(j = 0; j <5; j++)     {         temp[i+j] += num2[i] * num1[j];         temp[i+j+1] = temp[i+j]/10;    //进位处理         temp[i+j] %=10;     }     for(j = 0; j < 10; j++)     {         result[j] += temp[j];         result[j+1] += result[j]/10;    //进位处理         result[j] %= 10;     } }

本来没什么思路的,看到55楼,眼前一亮。  想起了以前周立功机考时遇到的一道题。 一个Byte就有8bit,这8bit就能表示出:2的7次方+(2的7次方-1)大小的数据。 
2的25次方就是 16384*2048,就已经比你的2000*10000大了, 但这只需要4个byte既可以存储了.

ps: 丫的 数字的次方怎么打字出来啊~~~

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。