以下是使用 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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录