【发布时间】:2015-11-17 00:59:46
【问题描述】:
在下面的代码 sn-p 中,我在运行时遇到了一个浮点异常。我相信异常发生在除以 r 的那一行。当我评论该行时,我没有收到任何错误。
当我在 gcc 中编译时使用“-g”标志(尝试调试)或者如果我在“if 语句”之后立即插入一些“cout 语句”,那么我没有得到任何浮点数,这也非常奇怪运行时异常。
我已经盯着这段代码的屏幕看了好几个小时了,也许我犯了一些愚蠢的错误..请帮忙!
double prev;
for(int i=0;i<320;i++)
for(int j=0;j<320;j++)
{
double x = -8 + i*0.05;
double y = -8 + j*0.05;
r= sqrt(x*x+y*y);
double kappa = atanh( (2*r) / ( 2 + r*r) );
if( fabs(r) > 1e-7 )
{
prev= ( x*sinh(kappa) )/r;
}
else
{
prev=0;
}
/* more stuff */
}
更新: 所以我能够通过在有争议的行上将 1e-15 添加到分母来解决问题..
prev= ( x*sinh(kappa) )/(r+1e-15);
我仍然不确定为什么 if 条件为 true .. for if(fabs(r)>1e-7) when r =0;
【问题讨论】:
-
会不会是溢出异常?我的意思是,
sinh确实增长为 O(e^x) -
感谢您的评论。我用简单的 prev = 1/r ... 替换了该行,但仍然是同样的错误。