浮点异常的麻烦

时间:2013-02-02 06:47:42

标签: c++ debugging exception error-handling floating-point-exceptions

我尝试了一个调试器和Catch并抛出,虽然我承认我也不习惯。但我无法在程序中找到浮点异常的原因。奇怪的是它运行完美的数字< = 35.除此之外,它引发了异常。问题出在哪里?

int fibo(int n)
{   if(n==0 || n==1)
        return 1;
    int p=1;
    while(n>1)
        p*=(n--);
    return p;
}

int main()
{   int T;
    int N, M;
    cin>>T;
    for(int i=0; i<T; i++)
    {
        cin>>N>>M;
        int cnt=1;
        int ones=N, twos=0;
        if(ones==1 && M==1)
        {   cout<<"CORRECT"<<endl;
            continue;
        }
        else if(ones==1 && M!=1)
        {   cout<<"INCORRECT"<<endl;
            continue;
        }

        while(ones>=2)
        {   
            ones-=2;
            twos++;
            cnt+= fibo(ones+twos)/( fibo(ones) * fibo(twos) );
        }
        cout<<cnt<<endl;
        int tmp=0;
        while(cnt>0)
        {   if(cnt%2 == 1)
                tmp++;
            cnt/=2;
        }
        if(  tmp==M  )
            cout<<"CORRECT"<<endl;
        else
            cout<<"INCORRECT"<<endl;
    }

    system("pause");
    return 0;
}

非常感谢。

1 个答案:

答案 0 :(得分:1)

“浮点异常”不是C ++异常。 trycatch对您无济于事。这是不幸的术语,但它来自操作系统,更像是“崩溃”。

更令人费解的是,在尝试执行整数除以零时,您可以在某些平台上看到它。我没有解开你的代码,但添加了大量的调试输出并跟踪变量的值,并找到你除以零的地方,因为,好吧,你在某处做了。 :)

我能看到的唯一一个候选人是:

cnt+= fibo(ones+twos)/( fibo(ones) * fibo(twos) )
//                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^