- 締切済み
C++でのeの近似値の求め方
問題はeの値は次の近似式で求めることができる。 e=1+1/1!+1/2!+1/3!+...+1/(n-1)!+1/n! nの値を12としてeの近似値を求めるプログラムを作成せよ。 <出力形式> n n! 1/n! e 誤差 1 1 1.0000000000 2.0000000000 0.7182818285 2 2 0.5000000000 2.5000000000 0.2182818285 . . . . . 12 <小数点以下10桁まで表示> が問題なんです。 ヒントとして <1から25までの合計> #include<iostream.h> #include<imanip.h> main() { int k,sum; sum=0; for(k=1;k<25;++k) {sum+=k; cout<<setw(5)<<k <<setw(7)<<sum<<"\n";} return 0; } これと <nの階乗を求める> #include<iostream.h> #include<imanip.h> main() { int n,k,ki(1); cout <<"nの値は?==>";cin>>n; for (k=1;k<=n;++k) { ki*=k; cout<<setw(5)<<k <<setw(12)<<ki<<"\n";} return 0; } がヒントとして与えられているんです。この2つをうまく使ったら良いよって言われたんですけどよく考えてもわからないんです。どなたかこの問題を解ける人がいたら教えてください。お願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
//あなたのためにはならないと思うけど一応作ってみました。 //細部は修正しましょう #include <iostream.h> #include <iomanip.h> #define N 12 //12までやる //e=1+1/1!+1/2!+1/3!+...+1/(n-1)!+1/n! int main(){ double e=1.0; unsigned long k=1; cout << " n\t" << "n!\t" << "1/n!\t" << "\te\t\t" << "誤差" << endl; for(int n=1;n<=N;n++){ k*=n; e+=1.0/k; cout << setw(3) << n << setw(10) <<k << " "; cout << setw(12) << setprecision(10) << 1.0/k; cout << setw(12) << setprecision(10) << e ; cout << setw(16) << setprecision(10) << exp(1)-e << endl; } return 0; }
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
ヒントの意味は、 合計の方は 1+1/1! + 1/2! … をそれぞれの部分を合計すればいいよ n!はもう求められるよね ってことだと思いますよ。 ループをうまく利用することと 使う変数の有効桁数をよく考えてやればいいと思いますよ。 eの誤差を求めるところは、 exp関数を使うってことだろうと思います。
補足
回答ありがとうございます。それも踏まえた上で考えたのですがうまくプログラムが作れないんです。具体的にプログラムで教えていただきたいのですが?無理を言って申し訳ありません。
お礼
本当にありがとうございます。すごく助かりました。ご丁寧に書いていただき感謝します。どんな人という欄には一般人と書かれていますが専門の方でないのにこのプログラムを作ることができるなんて(^^;)自分も頑張りたいと思います。