今天我正在跟蹤一些我剛寫過的代碼中的浮點異常。花了一點時間才發現,因爲它實際上是由整數模0引起的。顯然,做任何mod零不會被定義,但我認爲這是錯誤的誤導是奇怪的。在C++模運算符中,它將使用兩個整數的浮點數? (我使用gcc 4.3.2)b爲零時,爲什麼%b會產生SIGFPE?
下面是一個簡單的程序來演示錯誤。
int main()
{
int a=3,b=0;
int c=a%b;
return 0;
}
今天我正在跟蹤一些我剛寫過的代碼中的浮點異常。花了一點時間才發現,因爲它實際上是由整數模0引起的。顯然,做任何mod零不會被定義,但我認爲這是錯誤的誤導是奇怪的。在C++模運算符中,它將使用兩個整數的浮點數? (我使用gcc 4.3.2)b爲零時,爲什麼%b會產生SIGFPE?
下面是一個簡單的程序來演示錯誤。
int main()
{
int a=3,b=0;
int c=a%b;
return 0;
}
的操作觸發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;