[关于极限]为什么求π的程序会出现空数据?
本帖最后由 Jackxwb 于 2016-3-5 01:44 编辑变量上已经用了long类型了,从数值上看也没有超出范围。
原程序地址:http://www.cnblogs.com/PegasusWang/archive/2013/03/17/2965189.html
关于printf命令用了中文社区 奈何col 的程序
地址:http://www.arduino.cn/thread-8366-1-1.html
移植版(本人copy后略微修改过)
int a = 10000, b, c = 1000,e, g, ls, ls2, cs;
long d,f;
int serial_putc( char c, struct __file * )
{
Serial.write( c );
return c;
}
void printf_begin(void)
{
fdevopen( &serial_putc, 0 );
}
void setup() {
// put your setup code here, to run once:
int i;
Serial.begin(9600);
printf_begin();
Serial.println("pi =");
for (i = 0; i < c; i++)
f = a / 5;
while (c != 0)
{
d = 0;
g = c * 2;
b = c;
while (1)
{
d = d + f * a;
g = g - 1;
f = d % g;
d = d / g;
g = g - 1;
b = b - 1;
if (b == 0) break;
d = d * b;
}
c = c - 14;
cs++;
printf("(%.4d)%d", e + d / a, cs);//此次加括号仅为了好看。cs本为循环次数
if (e + d / a == 0) break;
e = d % a;
}
Serial.println("");
Serial.println("run:" + ls);
}
void loop() {
// put your main code here, to run repeatedly:
}
本人使用的是mega 2560,内存已使用了51%
如果编译时提示“没有足够的内存。”时,请把 f 的数组及 c 的数组改小一点。(c 的值等于 f 的数组数减一)
有檢查過 b 的值有可能 < 0 嗎?
在 設定f = d % g; 之前, 加入以下的檢測看看:if (b < 0 )Serial.println("Error: b < 0"); 楼上正解,是由于c-14 造成的b小于0,c的数值应该是14的整数倍,就不会有此问题了。 本帖最后由 Jackxwb 于 2016-3-28 22:25 编辑
janeasy 发表于 2016-3-7 16:29 static/image/common/back.gif
楼上正解,是由于c-14 造成的b小于0,c的数值应该是14的整数倍,就不会有此问题了。
谢谢!
.
一开始是想用来测试一下性能的,由于考虑到变量有效范围太窄,目前已经放弃了。
这么久没回复不好意思~ Super169 发表于 2016-3-6 00:25 static/image/common/back.gif
有檢查過 b 的值有可能 < 0 嗎?
在 設定之前, 加入以下的檢測看看:
谢谢!
虽然目前已经放弃这个项目了,但还是要感谢一下。
这么久没回复不好意思~
页:
[1]