使用c ++ for循环估计pi

时间:2016-02-24 20:03:21

标签: c++ loops series approximation

我正在尝试使用for循环来近似pi。用户输入迭代次数n,并且程序应该在每次额外迭代时获得pi越来越高的值。我有一个嵌套的“if”控制结构,用于检查“i”是偶数还是奇数。然而,当我的循环在第一次运行后重复时,我的pi值不会改变。 Pi在循环中保持1,最终输出为4.我必须使用近似系列:

pi = 4 [1 -1 / 3 + 1/5 + ... + 1 /(2n-1)+ 1 /(2n + 1)]。

我做错了什么?

int _tmain(int argc, _TCHAR* argv[])
{

double pi = 0;
long i;
int n;

cout << "Enter the value of n: ";   //prompt for input
cin >> n;                           //store input in "n"
cout << endl;                       //end line

for (i = 0; i < n; i++)
{
    if (i % 2 == 0)                     //if even
        pi = pi + (1 / (2 * i + 1));
    else                                //if odd
        pi = pi - (1 / (2 * i + 1));
}

pi = 4 * pi;                            //multiply by 4

cout << endl << "pi = " << pi << endl;  //display result

system("Pause");    //pause program
return 0;           //close program

1 个答案:

答案 0 :(得分:0)

问题是您在计算浮点数时使用pi = pi + (1.0 / (2.0 * i + 1.0)); 。在此处阅读:the lines

为避免这种情况,您需要使用浮点数进行数学运算:

const float pi_real = 3.14159;
const float one = 1.0;

事实上,总是明确指定何时使用浮点数是个好主意,即使它是不必要的:

chkchroot

这使你的意图清晰,避免这样的错误。 Why can't I return a double from two ints being divided