0

在下面的代码片段中,我在运行时遇到了一个浮点异常。我相信异常发生在除以 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;

4

1 回答 1

0

一个负数的平方?尝试

r= sqrt(fabs(x*x+y*y)); 

在代码段的第 7 行。

于 2015-11-17T01:05:35.300 回答