我通常是R用户,但我试图使用C进行一些较低级别的累加和乘法。
我正在尝试生成 eta 的累积总和并将结果存储在 tmp0 中。但是,当我输出 tmp0 时,它会给我Inf,NaN或一些任意大的数字。我仔细检查了R中相同的累加总和,效果很好;我不确定为什么C不处理它。下面是我正在使用的代码:
int i,j;
const int p = ncov, n = nin;
double accNum0[n]; //accumulate first part of likelihood sum eta_i
double accNum1[n]; //accumulate the backwards numerator
double accNum2[n]; //acumulate the forward numerator (weighted)
double tmp0 = 0;
double eta[n]; //calculate linear predictor in this step (X %*% beta)
for(i = 0; i < n; i++) {
for (j = 0; j < p; j++)
eta[i] += b[j] * x[n * j + i];
}
for (i = 0; i < n; ++i) {
tmp0 += eta[i];
}
return (tmp0);
我还是C语言的新手,所以我可能会犯一些菜鸟错误,非常感谢任何(和所有)建议!
答案 0 :(得分:5)
初始化b
或x
的方式可能有误。但是,一个确定的错误是eta
被未初始化使用。这意味着eta[i]
可能以某个任意值开头,而不是您可能期望的0
。
在初始化之前添加一个初始化。
for(i = 0; i < n; i++) {
eta[i] = 0;
for (j = 0; j < p; j++)
eta[i] += b[j] * x[n * j + i];
}