我正在尝试使用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
答案 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