今天我正在跟踪一些我刚写过的代码中的浮点异常。花了一点时间才发现,因为它实际上是由整数模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;