首页 新闻 会员 周边 捐助

C++数值计算浮点数溢出的问题。

0
悬赏园豆:5 [已关闭问题] 关闭于 2010-09-10 16:57

函数如下:

double Preprocess:: CalChiSquareValue(int N11,int N10,int N01,int N00)
{
 double chiSquare=0;
 chiSquare=double(N11+N10+N01+N00)*pow(double(N11*N00-N10*N01),2)/double((N11+N01)*(N11+N10)*(N10+N00)*(N01+N00));

 return chiSquare;
}

其中int N11=3;
 int N10=9;
 int N01=474;
 int N00=514;

最后chiSquare结果为负数

我自己调试发现问题的部分为:

double((N11+N01)*(N11+N10)*(N10+N00)*(N01+N00));

这个结果为负数(本来应该为正数,matlab计算就是正数)。把数据类型用double换成long double仍然解决不了问题

程序报一个waring为:Warning 1 warning C4307: '*' : integral constant overflow

 

问题补充: 已经解决。方法 把int n11等改成double 上面之所以溢出是因为连乘法的中间运算用整数保存导致了溢出。
finallyly的主页 finallyly | 初学一级 | 园豆:100
提问于:2010-09-10 10:58
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册