C++ 用C+计算Pi+;

C++ 用C+计算Pi+;,c++,formula,pi,C++,Formula,Pi,我尝试使用以下公式计算Pi: 这是代码: #include <iostream> #include <cmath> using namespace std; int main() { long double n; cin >> n; long double first_part = 0.0, second_part = 0.0, pi = 0.0; for(int i = 0; i <= n; i++) {

我尝试使用以下公式计算Pi:

这是代码:

#include <iostream>
#include <cmath>
using namespace std;

int main() {

    long double n;
    cin >> n;
    long double first_part = 0.0, second_part = 0.0, pi = 0.0;

    for(int i = 0; i <= n; i++)
    {
        first_part += (pow(-1, n)) / ((2 * n + 1) * pow(5, 2 * n + 1));

        second_part += (pow(-1, n)) / ((2 * n + 1) * pow(239, 2 * n + 1));
    }

    pi = (first_part * 16) - (second_part * 4);

    cout << pi << endl;

    return 0;
}
#包括
#包括
使用名称空间std;
int main(){
长双n;
cin>>n;
长双第一部分=0.0,第二部分=0.0,pi=0.0;

对于(int i=0;i您使用了错误的变量:

for(int i = 0; i <= n; i++)
    ^^^^^
     iterating over 'i'

您已达到浮点精度的极限:

#include <cmath>
#include <iostream>

int main()
{
    // This will print inf (infinite)
    std::cout <<  std::pow(5.0, 600.0) << "\n"; // pow(5, 2 * n + 1))
    return 0;
}
#包括
#包括
int main()
{
//这将打印inf(无限)

std::cout将
for循环中的所有
n
替换为
i

#include <iostream>
#include <cmath>
using namespace std;

int main() {

    long double n;
    cin >> n;
    long double first_part = 0.0, second_part = 0.0, pi = 0.0;

    for(int i = 0; i <= n; i++)
    {
        first_part += (pow(-1, i)) / ((2 * i + 1) * pow(5, 2 * i + 1)); 

        second_part += (pow(-1, i)) / ((2 * i + 1) * pow(239, 2 * i + 1));
    }

    pi = (first_part * 16) - (second_part * 4);

    cout << pi << endl;

    return 0;
}
参考资料

#include <iostream>
#include <cmath>
using namespace std;

int main() {

    long double n;
    cin >> n;
    long double first_part = 0.0, second_part = 0.0, pi = 0.0;

    for(int i = 0; i <= n; i++)
    {
        first_part += (pow(-1, i)) / ((2 * i + 1) * pow(5, 2 * i + 1)); 

        second_part += (pow(-1, i)) / ((2 * i + 1) * pow(239, 2 * i + 1));
    }

    pi = (first_part * 16) - (second_part * 4);

    cout << pi << endl;

    return 0;
}
1.7E +/- 308 (15 digits)