2009-07-04 71 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不一定涉及浮点运算,但如果不打破向后兼容性,则无法更改其名称。