C++ C++;Pi估算程序工作不正常

C++ C++;Pi估算程序工作不正常,c++,C++,我目前正在编写一个程序,使用以下三种不同的公式估算Pi值: 这是我目前的计划: { double leibniz = 0.0; // pi value calculated from Leibniz double counter = 0.0; // starting value double eulerall = 0.0; // value calculated f

我目前正在编写一个程序,使用以下三种不同的公式估算Pi值:

这是我目前的计划:

{
double leibniz = 0.0; // pi value calculated from Leibniz                        
double counter = 0.0; // starting value                                          
double eulerall = 0.0; // value calculated from Euler (all integers)             
double eulerodd = 0.0; // value calculated from Euler (odds)                     
double eulerallans; // pi value calculated from Euler series (all integers)      
double euleroddans; // pi value calculated from Euler series (odd integers)      
int terms;
bool negatives = false;

cin >> terms;
cout << fixed << setprecision(12); // set digits after decimal to 12             
while(terms > counter){
leibniz = 4*(pow(-1, counter)) / (2*counter+1) + leibniz;
eulerall = (1/pow(counter+1,2)) + eulerall;
eulerodd = 32*(pow(-1, counter)) / (pow(2*counter + 1, 3)) + eulerodd;
counter++;
eulerallans = sqrt(eulerall*6);
euleroddans =  pow(eulerodd, 1.0/3.0);
cin >> terms;
if (terms < 0){
if(!negatives)
  negatives=true;
}
}

cout << right << setw(14) << "# TERMS" << setw(15) << "LEIBINZ" << setw(15) << "\
EULER-ALL" << setw(15) << "EULER-ODD" << endl;
cout << right << setw(14) << terms << " " << leibniz << " " << eulerallans << " "\
<< euleroddans <<endl;
cout << "There were " << negatives << " negative values read" << endl;

return 0;

}
{
double leibniz=0.0;//根据leibniz计算的pi值
双计数器=0.0;//起始值
double eulerall=0.0;//从Euler计算的值(所有整数)
double eulerodd=0.0;//根据Euler计算的值(赔率)
double Euleralans;//从Euler级数计算的pi值(所有整数)
double euleroddans;//根据Euler级数计算的pi值(奇数整数)
国际术语;
布尔否定=假;
cin>>术语;
术语;
如果(术语<0){
如果(!否定)
否定=正确;
}
}

我没有时间检查你所有的代码,但是

euleroddans =  pow(32*eulerodd, 1/3);
当我掠过它时,它立刻跳了起来
1/3
是一种整数算术,给您0。可能不是您想要的,您可能想要
1.0/3.0
或类似的东西


现在添加有点晚,因为我有时间再次查看您的代码@paddy是对的,您的代码中只有一条输入语句

我可能会将整个pi计算和输出放在一个函数中,然后循环输入,如:

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

void my_pi_func(int term);

int main()
{
    int term;

    cout << fixed << setprecision(12); // set digits after decimal to 12         

    while (cin >> term){
        my_pi_func(term);
    }

    return 0;

}

void my_pi_func(int term)
{
    if (term <= 0){
        cout << "\n\nNegative value or 0 read\n\n" << endl;
        return;
    }

    double leibniz = 0.0; // pi value calculated from Leibniz                     
    int counter = 0; // starting value                                       
    double eulerall = 0.0; // value calculated from Euler (all integers)          
    double eulerodd = 0.0; // value calculated from Euler (odds)                  
    double eulerallans = 0.0; // pi value calculated from Euler series (all integers)   
    double euleroddans = 0.0; // pi value calculated from Euler series (odd integers)

    while(term > counter){
    leibniz = 4*(pow(-1, counter)) / (2*counter+1) + leibniz;
    eulerall = (1/pow(counter+1,2)) + eulerall;
    eulerodd = (pow(-1, counter)) / (pow(2*counter + 1, 3)) + eulerodd;
    counter++;
    eulerallans = sqrt(eulerall*6);
    euleroddans =  pow(32*eulerodd, 1.0/3.0);
    }
    cout << right << setw(14) << "# TERMS" << setw(15) << "LEIBINZ" << setw(15)
    << "EULER-ALL" << setw(15) << "EULER-ODD" << endl;
    cout << right << setw(14) << term << " " << leibniz << " " << eulerallans 
    << " " << euleroddans <<endl;

}
#包括
#包括
#包括
使用名称空间std;
无效我的π函数(整数项);
int main()
{
整数项;
(术语){
my_pi_func(任期);
}
返回0;
}
无效my_pi_func(整数项)
{

如果(术语
355/113
足够精确,可以在地球表面定位汽车。
3.141592653589
可能在奥尔特云中定位原子(*)。我们真的需要更高的精度吗:-)*我已经测试了第一个假设,第二个只是夸张。哦,哇……我不敢相信我忽略了这一点。我刚刚更改了它,现在它正在正确编译。非常感谢!!@user3409117,从技术上讲,它总是正确编译的,只是这个特殊的问题是一个PEBKAC问题:-)@paxdiablo哈哈,你是对的。所以现在我唯一的问题是问题是,我的程序只读取输入文件中的第一个值。你们知道如何使它读取所有值吗?@user3409117您可以从读取多个值开始。目前您正在执行
cin>>术语
。也许您想循环它。嘿@paddy,我在while循环中添加了cin>>术语,但它完成了ly将输入文件的计算弄乱为多个整数。虽然,当我仅用一个整数测试它时,计算结果是正确的。