2012-08-27 141 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款規定:

...如果/或%的第二個操作數是零行爲是不確定的。 ...

這可以產生,例如,浮點異常。我也會導致更糟糕的事情發生。