C++ 高精度计算圆周率:Leibniz 级数实现
以下是使用 C++ 编写的计算圆周率的代码,它使用 Leibniz 级数实现高精度计算,并持续输出结果到控制台,最终将结果保存到 pi.txt 文件。
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cmath>
#include <vector>
using namespace std;
class HighPrecisionNumber {
private:
vector<int> digits;
int precision;
public:
HighPrecisionNumber(int precision) : precision(precision) {}
void addDigit(int digit) {
digits.push_back(digit);
}
void saveToFile() {
ofstream outputFile("pi.txt");
if (outputFile.is_open()) {
for (int i = 0; i < digits.size(); i++) {
outputFile << digits[i];
}
outputFile.close();
} else {
cout << "Unable to open file." << endl;
}
}
};
void calculatePi() {
HighPrecisionNumber pi(1000);
int maxIterations = 100000;
int numTerms = 0;
int sign = 1;
double sum = 0.0;
for (int i = 0; i < maxIterations; i++) {
double term = 1.0 / (2 * i + 1);
sum += sign * term;
if (i % 1000 == 0) {
int digit = static_cast<int>(4 * sum * pow(10, pi.precision));
pi.addDigit(digit);
cout << 'Calculated digit: ' << digit << endl;
}
sign *= -1;
numTerms++;
if (numTerms > 1000000) {
break;
}
}
pi.saveToFile();
}
int main() {
calculatePi();
return 0;
}
这段代码使用了一个名为HighPrecisionNumber的类来存储圆周率的高精度值。在calculatePi函数中,我们使用 Leibniz 级数来逼近圆周率。在每次迭代中,我们计算一个新的项,并将其添加到总和中。然后,我们将总和乘以10的精度次方,并将结果转换为整数,以获取当前的圆周率的高精度位数,并将其添加到HighPrecisionNumber对象中。
代码将结果保存到名为pi.txt的文件中。每计算出一位圆周率值时,都会在控制台上打印出来。
需要注意的是,代码中使用了自定义的高精度数字类,以避免浮点数精度问题。
原文地址: https://www.cveoy.top/t/topic/qB1Q 著作权归作者所有。请勿转载和采集!