所以,我正在编写一个非常简单的函数,在单位圆的四分之一处使用reimann和来逼近pi的值。这是我的代码:
double pi_approx(unsigned int n)
{
double width = 1 / n;
double sum = 0;
for(int i = 0 ; i <= 1 ; i += width)
{
sum += width * (1 - i * i);
}
return 4 * sum;
}
但是当我在我的终端上运行它时,它只是进入这种状态我可以只是键入什么?这是什么状态,为什么我要进入呢?我怎么能避免这种情况?
答案 0 :(得分:4)
两个问题,都是整数运算的结果。
正如 kaylum 在评论中指出的那样。当i+=width
是整数且i
时,i
不会修改width < 1
。
1 / n
为零,因此width
为零,您的循环变量永远不会更新。
所以,记住这些问题:
double pi_approx(unsigned int n)
{
double width = 1.0 / n; // One double operand, so n is promoted.
double sum = 0;
for(double i = 0 ; i <= 1 ; i += width)
{
sum += width * (1 - i * i);
}
return 4 * sum;
}