作者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