我的功能不会返回任何内容;终端进入一些炼狱?

时间:2017-04-09 05:48:30

标签: c return

所以,我正在编写一个非常简单的函数,在单位圆的四分之一处使用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;
}

但是当我在我的终端上运行它时,它只是进入这种状态我可以只是键入什么?这是什么状态,为什么我要进入呢?我怎么能避免这种情况?

1 个答案:

答案 0 :(得分:4)

两个问题,都是整数运算的结果。

  1. 正如 kaylum 在评论中指出的那样。当i+=width是整数且i时,i不会修改width < 1

  2. 1 / n为零,因此width为零,您的循环变量永远不会更新。

  3. 所以,记住这些问题:

    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;
    }