我编写了一个计算 e 的程序,并且正在研究世界纪录计算。我将如何验证比任何其他现有计算具有更多小数位的计算?我将如何在 C++/Python 中进行编程?
3 回答
我没有看到任何可用的欧拉数恒等式可以让您快速检查计算的有效性。在这种情况下,我认为你必须忍受的是根据已知的基本事实检查小数点的前一位(数百万),如果它适合你,你会声称你的算法工作正常。这就是单元测试框架中有时称为“已知案例”的内容。
您应该将嫌疑人的链接复制到 .txt 文件中,然后编写一个程序,使用 fstream 逐位比较每个元素,以检查您是否正确获取了前 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 位。特别是你应该学习真实分析: 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!)...
精确计算的主要问题是证明你的结果是正确的。如果e
您说您的算法将打印n 个e
十进制数字,则意味着您可以通过数学证明您的数字与欧拉数的差异不超过 10E-n。
换句话说,在编写程序之前,您必须开发一种算法并证明它的正确性。