2009-07-04 70 views
22

今天我正在跟蹤一些我剛寫過的代碼中的浮點異常。花了一點時間才發現,因爲它實際上是由整數模0引起的。顯然,做任何mod零不會被定義,但我認爲這是錯誤的誤導是奇怪的。在C++模運算符中,它將使用兩個整數的浮點數? (我使用gcc 4.3.2)b爲零時,爲什麼%b會產生SIGFPE?

下面是一個簡單的程序來演示錯誤。

int main() 
{ 
    int a=3,b=0; 
    int c=a%b; 
    return 0; 
} 

回答

33

的操作觸發SIGFPE

SIG爲信號 名共同的前綴; FPE是 浮點異常的首字母縮寫。雖然 SIGFPE不一定涉及 浮點運算,但沒有 的方式來更改其名稱,而不是 打破向後兼容性。

GDB是關於這一點更清晰,稱之爲 「運算異常」:

(gdb) run 
Starting program: /home/emil/float 

Program received signal SIGFPE, Arithmetic exception. 
0x0804837d in main() at float.c:4 
4   int c=a%b; 
9

看看this page

您的問題

相關部分:

SIG是信號名的通用前綴; FPE是浮點異常的首字母縮寫。儘管SIGFPE不一定涉及浮點運算,但如果不打破向後兼容性,則無法更改其名稱。