在下面的代码片段中,我在运行时遇到了一个浮点异常。我相信异常发生在除以 r 的行。当我评论该行时,我没有收到任何错误。
同样非常奇怪的是,当我使用“-g”标志在 gcc 中编译(尝试调试)或者如果我在“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;