因此,我正在编写一个非常简单的函数,以在四分之一单位圆上使用莱曼求和来近似 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;
}
但是当我在我的终端上运行它时,它只是进入我可以输入任何内容的状态?那是什么状态,我为什么要进入它?我怎样才能避免这种情况?
最佳答案
两个问题,都是整数运算的结果。
正如 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;
}
关于c - 我的函数不返回任何东西;终端进入炼狱?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43303502/