求圆周率,为什么记过是#infoo不懂。

gilnuy0106 2011-06-15 04:47:45
#include<stdio.h>
main()
{
float num=1.0,don=1.0;
float x;

for(int n=1;n<=50;n++)
{
num*=(2*n*2);
don*=(n-1)*(n+1);

}

x=(num/don)*2.0;
printf("%f\n",x);

}
...全文
237 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
pathuang68 2011-06-16
  • 打赏
  • 举报
回复
num太大了(=4^50 * 50!),溢出。照下面这么改就不会出现#INF的问题了

#include<stdio.h>
int main(void)
{
float num = 1.0, don = 1.0;
float x = 1.0;

for(int n = 2; n <= 1000; n = n + 2)
{
num = n * n;
don = (n - 1) * (n + 1);
x *= (float)(num / don); // 先在这里把两者相除的结果计算出来,然后再连乘
}

x *= 2.0;
printf("%f\n", x);
}
aa1013911535 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 pathuang68 的回复:]
num太大了(=4^50 * 50!),溢出。照下面这么改就不会出现#INF的问题了

C/C++ code

#include<stdio.h>
int main(void)
{
float num = 1.0, don = 1.0;
float x = 1.0;

for(int n = 2; n <= 1000; n = n + 2)
{……
[/Quote]
学习了。。
xspace_time 2011-06-15
  • 打赏
  • 举报
回复
4*50!是在太大了
cqltwslt 2011-06-15
  • 打赏
  • 举报
回复
我也不是很清楚,百度里有很多这类问题,等待大牛....中
gilnuy0106 2011-06-15
  • 打赏
  • 举报
回复
#include<stdio.h>
main()
{
float num=1.0, don=1.0, x;

for(int n=2;n<=100;n=n+2)
{
num*=(n*n);
don*=(n-1)*(n+1);

}

x=(num/don)*2.0;
printf("%f\n",x);

}这样为什么还是一样的结果-1.#infoo
cqltwslt 2011-06-15
  • 打赏
  • 举报
回复
x=(num/don)*2.0;
除以零了!(/don)

69,373

社区成员

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

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