2012-08-27 92 views
0

我这样做是为了欧拉项目问题5,但由于某种原因,我得到一个浮点异常:C++浮点异常

#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; 
} 

我不明白的是怎么可以有一个浮点异常当我对我的代码不做任何处理时,会输出一个非整数。

回答

1

您在for循环的第一次迭代其中j == 0做i % j有一个被零除这里。

因此浮点异常。

3

由于您使用i % jj被初始化为零,你得到了一个未定义的行为,按照5.6 [expr.mul]第4款规定:

...如果/或%的第二个操作数是零行为是不确定的。 ...

这可以产生,例如,浮点异常。我也会导致更糟糕的事情发生。