【问题标题】:Estimating pi with c++ for loop [duplicate]用c ++ for循环估计pi [重复]
【发布时间】:2016-02-24 20:03:20
【问题描述】:

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

【问题讨论】:

  • 整数除法。x / y0 用于具有x &lt; y 的整数对。只有 i = 0 真正贡献于 pi
  • 一些代码的东西:a) 不要习惯_t 的东西,最好完全忘记它。 b) 缩进。
  • 基于示例系列,for 循环应该是 |对于 (i = 0; i = 0; i--) | .
  • @DavidHeffernan,这并不是真正的重复,因为整数除法不是问题的一部分。这是一个代码分析/调试问题。
  • @ThomasMcLeod 我可以在问题中看到整数除法

标签: c++ loops series approximation


【解决方案1】:

问题是您在计算浮点数时使用了ints。在此处阅读:Why can't I return a double from two ints being divided

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

pi = pi + (1.0 / (2.0 * i + 1.0));

事实上,当您打算使用浮点时,始终明确指定是一个好主意,即使没有必要:

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

这使您的意图清晰并避免此类错误。 Here is a live example.

【讨论】:

  • 非常感谢!!那真是要了我的命。
猜你喜欢
  • 2011-12-17
  • 1970-01-01
  • 2018-04-11
  • 1970-01-01
  • 2010-11-14
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多