[問題] 計算e值的程式

看板C_and_CPP (C/C++)作者 (___)時間16年前 (2009/10/27 19:14), 編輯推噓2(2014)
留言16則, 6人參與, 最新討論串1/1
遇到的問題: (題意請描述清楚) 幫我檢查一下哪裡寫錯了,謝謝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

10/27 19:43, , 1F
注意一下整數的範圍 這樣跑是無窮迴圈喔
10/27 19:43, 1F

10/27 19:56, , 2F
應該用 double fact(int j)吧 要不然int一下就爆了
10/27 19:56, 2F

10/27 19:57, , 3F
不過我想出不來的原因應該是你用n^2的演算法 跑10M @@
10/27 19:57, 3F

10/27 20:00, , 4F
其實如果精確度只要11位 不到20!就夠了吧
10/27 20:00, 4F

10/27 20:22, , 5F
我用了double也沒用耶....
10/27 20:22, 5F

10/27 20:23, , 6F
不過只用20!就可以了^^
10/27 20:23, 6F

10/27 20:26, , 7F
有一件事 原po還是要知道 13!就已經60幾億了
10/27 20:26, 7F

10/27 20:27, , 8F
早就超過int能存的21億了 會對的原因是之後的1/n!太小了
10/27 20:27, 8F

10/27 20:30, , 9F
恩恩我剛試過.到13階就錯了.那有辦法在更多嗎?
10/27 20:30, 9F

10/27 20:49, , 10F
用double啊 用法就和你寫你的main一樣 反正用到大數時
10/27 20:49, 10F

10/27 20:50, , 11F
就存成double ,我記得double 好像可以到10的幾百次方吧
10/27 20:50, 11F

10/27 20:53, , 12F
約正負1.7e(+-308)的範圍, 但是因為mantisa bits有限,
10/27 20:53, 12F

10/27 20:54, , 13F
數值大到一定程度基本上就開始不精確了; 只是補充一下:)
10/27 20:54, 13F

10/27 20:54, , 14F
話說, 這個是不是改個標題比較好啊....XD
10/27 20:54, 14F

10/27 21:46, , 15F
標題列請清楚寫明要問的問題,請來信解鎖,謝謝
10/27 21:46, 15F

10/28 09:39, , 16F
用除法去算會不會比較好呀...
10/28 09:39, 16F
文章代碼(AID): #1AvjOkzy (C_and_CPP)
文章代碼(AID): #1AvjOkzy (C_and_CPP)