c求pi的值 程序有问题么???调试环境tc2.0

hahake 2009-12-11 12:36:56
#include<stdio.h>
#include<math.h>
void main()
{
float pi=0,t=1.0,i=1.0;
int j=-1;
while(fabs(t)>1e-6)
{
j=-j;
t=i/j;
pi=pi+t;
i=i+2;
}
pi=4*pi;
printf("pi= %f\n",pi);
}
/*关键错误:1.T的赋值或随机值上。

2.判断循环1E-6上。

若T不赋值,在一些机子上是死循环,另一些不执行循环(这与电脑随机值有关)。

若T赋值1:(1)若1E-6不改,执行时为死循环。

(2)若1E—6改为0.25,可以正常执行。

原因可能在于1E—6默认为0,绝对值恒大于零。*/
...全文
184 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
deng1243 2009-12-11
  • 打赏
  • 举报
回复
#include <stdio.h> 
#include <math.h>
void main()
{
double pi=0,t=1.0,i=1.0;
int j=-1;
while(fabs(t)>1e-6)
{
j=-j;
t=j/i; //是j/i,注意
pi=pi+t;
i=i+2;
}
pi=4*pi;
printf("pi= %f\n",pi);
}

t=j/i; //是j/i,注意
selooloo 2009-12-11
  • 打赏
  • 举报
回复
j绝对值不变,i越来越大,t=i/j就越来越大,fabs(t)永远大于1e-6,程序进入死循环
苍蝇①号 2009-12-11
  • 打赏
  • 举报
回复
直接用math.h提供的常量不可以吗
ArmStronger 2009-12-11
  • 打赏
  • 举报
回复
这个貌似是死循环了,fabs(t)只会越来越大,肯定大于1E—6
selooloo 2009-12-11
  • 打赏
  • 举报
回复
tc2.0 有float bug,换TC 3.0 或别的编译器
还有float只能精确到小数点后6位,1e-8对float来说就是个0,想结果精确点就用double
hahake 2009-12-11
  • 打赏
  • 举报
回复
谢谢 各位 刚才是自己在调试把程序给改了 原来的程序时这样的
#include <stdio.h>
#include <math.h>
void main()
{
float pi=0,t=1.0,i=1.0;
int j=-1;
while(fabs(t)>1e-6)
{
j=-j;
t=j/i; //刚才这地方写错了
pi=pi+t;
i=i+2;
}
pi=4*pi;
printf("pi= %f\n",pi);
}
/*调试环境tc2.0 刚开始调试的时候 程序一执行就死了,后来能出来结果3.1415928 ,遂将1e-6 改为1e-8 结果还是一执行就死 这和什么有原因??? */
z569362161 2009-12-11
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <math.h>
int main()
{ float pi=0,t=1.0,i=1.0;
int j=-1;
while(fabs(t)>1e-6)
{ j=-j;
t=j/i;
pi+=t;
i=i+2;
}
pi=4*pi;
printf("pi= %f\n",pi);
}
学习.

69,369

社区成员

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

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