C++20算圆周率代码一直算每算出一位输出一次不需要输入所求位数一直算关闭时存储到文件pitxt下提示:使用doublefloat会出现精度问题建议自己做一个高精度的类存储PI
下面是一个使用C++编写的计算圆周率的代码示例,其中使用了一个高精度的类BigNumber来存储计算结果,并将结果输出到文件pi.txt中。
#include <iostream>
#include <fstream>
#include <cmath>
class BigNumber {
public:
BigNumber() {
digits.push_back(0);
}
void multiplyBy(int num) {
int carry = 0;
for (int i = 0; i < digits.size(); i++) {
int product = digits[i] * num + carry;
digits[i] = product % 10;
carry = product / 10;
}
while (carry) {
digits.push_back(carry % 10);
carry /= 10;
}
}
void divideBy(int num) {
int remainder = 0;
for (int i = digits.size() - 1; i >= 0; i--) {
int dividend = digits[i] + remainder * 10;
digits[i] = dividend / num;
remainder = dividend % num;
}
}
std::string toString() const {
std::string result;
for (int i = digits.size() - 1; i >= 0; i--) {
result += std::to_string(digits[i]);
}
return result;
}
private:
std::vector<int> digits;
};
void calculatePi() {
int precision = 0;
BigNumber pi;
std::ofstream outputFile("pi.txt");
while (true) {
// 计算圆周率的公式
int numerator = pow(10, precision + 1) * (4 * pow(10, precision) - 2 * pow(10, precision - 1));
int denominator = pow(10, 2 * precision) * (2 * precision + 1);
BigNumber term;
term.multiplyBy(numerator);
term.divideBy(denominator);
pi.multiplyBy(10);
pi.digits[0] += term.digits[0];
if (precision % 10 == 0) {
std::cout << "Current precision: " << precision << std::endl;
}
outputFile << pi.toString() << std::endl;
precision++;
}
}
int main() {
calculatePi();
return 0;
}
这个代码使用了一个BigNumber类,用于存储高精度的计算结果。在calculatePi函数中,我们使用了Machin-like公式来计算圆周率的每一位,并将结果存储到pi.txt文件中。
在main函数中,我们调用calculatePi函数来开始计算圆周率。程序会一直计算下去,每计算出一位圆周率就会输出一次,并将结果存储到文件中。你可以在需要时关闭程序,然后查看生成的pi.txt文件来获取计算结果
原文地址: https://www.cveoy.top/t/topic/iV1e 著作权归作者所有。请勿转载和采集!