cout将变量从nan变为零?

时间:2016-11-03 18:53:26

标签: nan cout

我有一个非常好奇的问题。在下面我有一个小代码的剪切。该程序似乎没有任何理由创建nan输出,因此它不起作用。在58次循环之后,返回值res_force_vector的输出变为nan(我不知道为什么......)。 但是,如果我想知道向量loc_force_vec,代码似乎工作正常,输出向量res_force_vec不再是nan? cout会改变代码中的某些内容吗?我怎么能解决这个问题?

....
// Material data of linear material
double E = elements_info(i,2);
double d = elements_info(i,3);
double nue = elements_info(i,4);
//calculate inner restoring force vector
element_array[i].load_data(x_coor,y_coor,E,nue,d);
VectorXd loc_force_vec =  element_array[i].create_force_lin(disp_elem,save_params,timestep_counter);
cout << "local force of element: " << i << endl; 
cout << loc_force_vec << endl;        /////////// this line
//write local into global force vector
    for (int k=0;k<dof_vec.rows();k++){
  dof = dof_vec(k);
  if (dof!=0){
    res_force_vec(dof-1) += loc_force_vec(k);
  }
}
cout << "norm of internal force of element: " << i << endl;
cout << res_force_vec.norm() << endl;
cin.get();
}
return res_force_vec;
....

我希望这个问题不是唯一的...

提前致谢 弗朗兹

1 个答案:

答案 0 :(得分:0)

为了清楚起见,所有输出res_force_vec应为零向量。实际上它们是,但是在58次循环之后它变成了nan,如果我想通过cout检查所有变量来查看原因,那么res_force_vec似乎不再是nan了。也许loc_force_vector也是nan但是当我用cout打印它时它会改变为正确的值零???? 对不起,我有点绝望......