C中的累积总和达到无穷大

时间:2018-12-19 02:00:22

标签: c

我通常是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语言的新手,所以我可能会犯一些菜鸟错误,非常感谢任何(和所有)建议!

1 个答案:

答案 0 :(得分:5)

初始化bx的方式可能有误。但是,一个确定的错误是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];
  }
相关问题