オイラー数 e を計算するプログラムを書きなさい。これを行うには、まずパラメーター n を受け取り、結果 (1+1/n) nを返す関数を作成します。この関数の極限は、n が無限大に近づくにつれて e に近づきます。メイン プログラムで、n の値を増やしながらこの関数を呼び出すループを記述します。各反復で、n を 2 で乗算し (毎回 n に 1 を追加するだけでは、アルゴリズムは機能しません)、新しい近似と以前の近似の差が 1e-8 未満になったら停止します。これでかなり良い見積もりができました。したがって、main() で、最適な近似値とそれを生成した数 n を出力します。
for ループまですべて実行しました。新しい数値と前の数値がほぼ同じになった後、for ループを停止する方法がよくわかりません。
これが私の機能です:
double euler_finder(double n)
{
return pow((1+1/n), n);
}
そして、これがメインメソッドの for ループです。私が問題を抱えている場所です:
for (int i=0; i<????; i*=2) {
}
編集:ソリューションが投稿されているので、ここではどのように見えるか:
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
double euler(int n);
int main()
{
int trialN = 4;
double guess1, guess2;
guess1 = euler(1);
guess2 = euler(2);
while( abs(guess1-guess2) > 1e-8 )
{
cout<< trialN << " " << guess2<<endl;
guess1 = guess2;
guess2 = euler( trialN );
trialN*=2;
}
cout<<setprecision(8)<<"e is approximately "<<guess2<<" and we got it with a value of ";
cout<<trialN<<" for n";
return 0;
}
double euler(int n)
{
return pow((1+1.0/n), n);
}
出力:
4 2.25
8 2.44141
16 2.56578
32 2.63793
64 2.67699
128 2.69734
256 2.70774
512 2.71299
1024 2.71563
2048 2.71696
4096 2.71762
8192 2.71795
16384 2.71812
32768 2.7182
65536 2.71824
131072 2.71826
262144 2.71827
524288 2.71828
1048576 2.71828
2097152 2.71828
4194304 2.71828
8388608 2.71828
16777216 2.71828
33554432 2.71828
67108864 2.71828
134217728 2.71828
e is approximately 2.7182818 and we got it with a value of 268435456 for n