C - 简单除法(1 / n)导致奇怪的答案

时间:2013-11-20 16:58:14

标签: c

我试图计算一个简单的积分近似值,将其分解为阶梯函数,简单的东西。当我只是尝试进行划分时,问题就出现了。这是我的代码:

double integrand(int a, double div, int n) {
    int i;
    double sum, val;

    val = 1.0/div;

    for(i = 0; i < div; i++) {
        sum = sum + (pow(i*val, n)/(i*val + a)) * val;
    }
    return sum;
}

这里div实际上是一个整数,我试着将它作为一个整数引入到integrand函数中并将其类型化为函数内的double,结果相同。当我调试代码时,div可以说是100,但是val会返回像-7.2008557565654656e + 304这样荒谬的东西。据我所知,其余的代码是正确的,但我无法弄明白,发生了什么?!

2 个答案:

答案 0 :(得分:2)

您从未初始化sum

double sum = 0, val;

现在,您在计算中使用它并使用未初始化的值,从而获得一些垃圾结果。

答案 1 :(得分:1)

首先初始化sum然后使用它。否则,它将调用未定义的行为