C -1.#Q0随机出现

C -1.#Q0随机出现,c,C,我有以下代码: float w[n][n] = { {0, 0, 0.5, -1, 0, 0, 0}, {0, 0, 1.5, -2, 0, 0, 0}, {0, 0, 0, 0, 1, -1, 0}, {0, 0, 0, 0, 3, -4, 0}, {0, 0, 0, 0, 0, 0, 1}, {0, 0, 0, 0, 0, 0, -3} }; float x[ne] = {2, -1}; float d = 1; float alpha = 0

我有以下代码:

float w[n][n] = {
    {0, 0, 0.5, -1, 0, 0, 0},
    {0, 0, 1.5, -2, 0, 0, 0},
    {0, 0, 0, 0, 1, -1, 0},
    {0, 0, 0, 0, 3, -4, 0},
    {0, 0, 0, 0, 0, 0, 1},
    {0, 0, 0, 0, 0, 0, -3}
};
float x[ne] = {2, -1};
float d = 1;
float alpha = 0.1;
float in[n];
float delta[n];
float a[n];
float sum;

for(j = ne; j <= n; j++) {
    for(i = 0; i <= n; i++) {
        in[j] += w[i][j] * a[i];
    }
    a[j] = g(in[j]);
}

for(i = 0; i < n; i++) {
    printf("a[%d] = %.3f\n", i+1, a[i]);
}

delta[n-1] = d - a[n-1];

for(i = n-2; i >= ne; i--) {
    for(j = 0; j <= n; j++) {
        sum += w[i][j] * delta[j];
    }
    delta[i] = g(in[i]) * (1 - g(in[i])) * sum;
    printf("delta[%d] = %.3f\n", i+1, delta[i]);
    sum = 0;
 }

printf("\n\n");

for(i = 0; i < n; i++) {
    for(j = 0; j < n; j++) {
        if (w[i][j] != 0) {
            w[i][j] = w[i][j] + alpha * a[i] * delta[j];
            printf("w[%d][%d] = %.3f\n", i+1, j+1, w[i][j]);
        }
    }
}

每次我编译时,它都会出现在不同的地方,因为我知道它第一次给了我正确的答案,我不确定哪里出错了?

代码不完整。为什么你把所有的变量都省略了?因为它们“不重要?”

请注意,这些声明非常重要


我不知道,但我预测
d
未设置为0,并且正在从堆栈中拾取0xFFFFFF。这不是一个浮点数。计算中的NaN值总是导致NaN结果。

提示:发布定义和初始化
sum,delta[]
@mari您的注释包括定义,但不包括初始化。也发布他们的初始化。@chux感谢您指出这一点,结果是我没有初始化
sum
,这是问题的原因@mari您可以发布自己的答案,并接受帮助关闭此帖子。
a[1] = 2.000
a[2] = -1.000
a[3] = 0.378
a[4] = 0.500
a[5] = 0.867
a[6] = 0.085
a[7] = 0.649

delta[6] = -1.#QO
delta[5] = -1.#QO
delta[4] = -1.#QO
delta[3] = -1.#QO

w[1][3] = -1.#QO
w[1][4] = -1.#QO
w[2][3] = -1.#QO
w[2][4] = -1.#QO
w[3][5] = -1.#QO
w[3][6] = -1.#QO
w[4][5] = -1.#QO
w[4][6] = -1.#QO
w[5][7] = 1.030
w[6][7] = -2.997