C++算圆周率代码一直算每算出一位输出一次不需要输入所求位数一直算关闭时存储到文件pitxt下提示:使用doublefloat会出现精度问题建议自己做一个高精度的类存储PI
以下是使用C++编写的计算圆周率的代码:
#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/iV09 著作权归作者所有。请勿转载和采集!