1

e を計算するプログラムを作成し、世界記録の計算に取り組んでいます。他の既存の計算よりも小数点以下の桁数が多い計算を検証するにはどうすればよいですか? C++/Python でどのようにプログラムしますか?

4

3 に答える 3

1

容疑者のリンクを .txt ファイルにコピーし、fstream を使用して各要素を 1 桁ずつ比較するプログラムを作成し、最初の 200 万桁が正しいかどうかを確認する必要があります。編集: 私はそれを可能にするプログラムを作成しました。ファイル名文字列を編集して一致するようにし、アルゴリズムがその番号を e_my_algorithm 文字列に入れるようにします。

#include <iostream>  
#include <string>
#include <fstream>
using namespace std;
int main()
{
fstream in;
string filename = "C:\\Users\\Aaron\\Desktop\\TXT.txt";
string e_known;
string e_my_algorithm;
in.open(filename);
while(in.good())
{
 e_known += in.get();  
}
in.close();
auto itk = e_known.begin();
auto ite = e_my_algorithm.begin();

while(itk != e_known.end() - 1)
{
if(*itk++ != *ite++)
{
cout << "failure" << endl; 
break;
}
}

return 0;
}

さらに、アルゴリズムが e を n 桁に正確に近似することを証明するには、数学のバックグラウンドが必要です。特に、Real Analysis を勉強する必要があります: http://en.wikipedia.org/wiki/Real_analysis

数学定数 e は、数学の専門家が完全に理解しているものであるため、あなたが思いついたアルゴリズムは数学者にすでに知られている可能性があります。したがって、おそらく e を近似する既存のメソッドを探して、それをコード化する必要があります。

本当に真剣に考えているなら、これをチェックしてみてください。どうやら誰かがオーバークロックしたデスクトップ コンピューターで世界記録を破ることができたようです: http://www.numberworld.org/misc_runs/e-500b.html

彼はテイラー級数展開を使用しました: e = 1/(0!) + 1/1(!) + 1/(2!) + 1/(3!) + 1/(4!)...

于 2013-06-27T13:56:10.280 に答える
1

計算の有効性をすばやく確認できる、使用可能なオイラー数の恒等式は見当たりません。その場合、小数第 1 位 (数百万) を既知のグラウンド トゥルースと照らし合わせて確認する必要があると思います。一致する場合は、アルゴリズムが正しく機能していると主張することになります。これは、単体テストフレームワークで「既知のケース」と呼ばれることがあります。

于 2013-06-27T12:50:39.677 に答える