c - 我的函数不返回任何东西;终端进入炼狱?

标签 c return

因此,我正在编写一个非常简单的函数,以在四分之一单位圆上使用莱曼求和来近似 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. 正如 kaylum 在评论中指出的那样。 i+=width不修改 i什么时候i是一个整数并且width < 1 .

  2. 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/

相关文章:

CS50 - 信用卡分配;分段故障

c - 尝试从 C 数组中删除元素时出现意外结果

c - MPI_Bcast 分段故障 139

c - C 中 lsearch 期间的段错误

Javascript 返回冒号

Java boolean 返回类型

c# - 使用 if 语句返回 bool

c - C 中的 fork() 流程

javascript - 使用 && 返回值

c++ - 将函数指针返回到在 main() 中初始化的对象