作者BuchPreis (___)
看板C_and_CPP
标题[问题] 帮检查一下
时间Tue Oct 27 19:14:51 2009
遇到的问题: (题意请描述清楚)
帮我检查一下哪里写错了,谢谢m(_ _)m
我要计算e值,e=1+1/1!+1/2!+1/3!+.....
开发平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
dev C++
有问题的code: (请善用置底文标色功能)
#include <iostream>
#include <iomanip>
using namespace std;
int fact(int);
int main()
{
int i;
int j=2;
double k=0.0;
for(i=0;i<=10000000;i++,j++)
{
k+=(double)1/fact(j);
}
cout<<"e="<<setprecision(11)<<k+1;
system("pause");
return 0;
}
int fact(int j)
{
if(j>0)
return (j*fact(j-1));
else
return 1;
}
补充说明:
我不太会写,是平感觉写的,可是也感觉很顺,但就是跑不出东西...
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.230.64.117
1F:→ iamivers0n:注意一下整数的范围 这样跑是无穷回圈喔 10/27 19:43
2F:→ goodword:应该用 double fact(int j)吧 要不然int一下就爆了 10/27 19:56
3F:→ goodword:不过我想出不来的原因应该是你用n^2的演算法 跑10M @@ 10/27 19:57
4F:→ goodword:其实如果精确度只要11位 不到20!就够了吧 10/27 20:00
5F:→ BuchPreis:我用了double也没用耶.... 10/27 20:22
6F:→ BuchPreis:不过只用20!就可以了^^ 10/27 20:23
7F:推 goodword:有一件事 原po还是要知道 13!就已经60几亿了 10/27 20:26
8F:→ goodword:早就超过int能存的21亿了 会对的原因是之後的1/n!太小了 10/27 20:27
9F:→ BuchPreis:恩恩我刚试过.到13阶就错了.那有办法在更多吗? 10/27 20:30
10F:→ goodword:用double啊 用法就和你写你的main一样 反正用到大数时 10/27 20:49
11F:→ goodword:就存成double ,我记得double 好像可以到10的几百次方吧 10/27 20:50
12F:推 VictorTom:约正负1.7e(+-308)的范围, 但是因为mantisa bits有限, 10/27 20:53
13F:→ VictorTom:数值大到一定程度基本上就开始不精确了; 只是补充一下:) 10/27 20:54
14F:→ VictorTom:话说, 这个是不是改个标题比较好啊....XD 10/27 20:54
15F:→ nowar100:标题列请清楚写明要问的问题,请来信解锁,谢谢 10/27 21:46
16F:→ dueseven:用除法去算会不会比较好呀... 10/28 09:39