题目是谭浩强编写的C程序设计中的例题:用Π/4≈1-1/3+1/5-1/7+……公式求Π的近似值,直到发现某一项的绝对值小于10^-6为止(该项不累加)。编写的代码见截图,同样的代码在VC6.0中可以运行出正确确结果,但在TurboC 3.0中却运行不出结果(但无语法错误)请教一下这是为什么?
我把代码写一下:
#include <stdio.h>
#include <math.h>
void main ()
{int n;
float pi,t,s;
s=1.0,pi=0,t=1,n=1;
while (fabs(t)>=1e-6)
{pi=pi+t;
n=n+2;
s=-s;
t=s/n;
}
pi=pi*4;
printf("pi is %f\n",pi);}
将循环条件改为fabs(t)>=1e-4却可以在Turbo C3.0中运行以上代码得到π的近似值,这是为什么??
感觉不像是,执行代码是时好像没有执行printf语句,是变成死循环了吗
追答你看看你的程序编译运行后有没有一直占用CPU时间,如果是则就像你说的那样,或者就像我说的数据类型的限制了。
追问我最不能理解的是我将循环条件从fabs(t)>=1e-6改成fabs(t)>=1e-4,便可以运行出结果了。。。况且我原来的循环条件不可能永远为真啊
追答1e-6和1e-4是不一样的,1e-6即是10的-6次方,1e-6比1e-4更小,因该说1e-6小数位位数更多,但是说来也奇怪,不是都是声明为float了吗?为什么不行?因此猜测是这个循环条件表达式出现问题了。
呵呵,看看“while (fabs(t)>=1e-6)”的1e-6,我想如果在其中加个(float)转换1e-6为单精度数值则程序可以正常运行了。
改成的double也不行,难道真是我的Turbo C有问题???
具体就是运行后无任何结果,只有光标停在那里。就连原样输出的普通字符也看不到。
追答从你的问题的描述来看(1e-4 可以,但 1e-6 不可以),是 TC3 不支持数据精度的问题。
按道理来说,应该是不存在这方面问题的。可能是代码在 while (fabs(t)>=1e-6) 表达式中执行的时间过长,以至于只有光标闪烁。
总结:代码的编写提正确的,是编译器的问题(可能是 TC3 的问题,比如安装不完整?)