c++浮点异常

c++ floating point exception

本文关键字:异常 c++      更新时间:2023-10-16

我为Euler项目问题5做了这件事,但由于某种原因,我得到了一个浮点异常:

#include <iostream>
using namespace std;
int main ()
{
    long num;
    bool isnum = false;
    long i = 20;
    while (isnum == false)
    {
        for (int j = 0; j <= 20; j++)
        {
            if (i % j != 0)
            {
                break;
            }
            else
            {
                num = i;
                isnum = true;
            }
        }
        i+=20;
    }
    cout << num << endl;
    return 0;
}

我不明白的是,当我对代码不做任何输出非整数的事情时,怎么会出现浮点异常。

i%j

这里有一个除以零的除法,因为j被初始化为0。

根据5.6[expr.mul]第4段:,由于使用i % jj初始化为零,因此会得到未定义的行为

如果/或%的第二个操作数为零,则行为未定义。。。

例如,这可能会产生浮点异常。我也会导致更恶劣的事情发生。

for循环的第一次迭代中,使用j==0执行i % j

因此浮点异常。