
_START_ARTICLE_
SIGFPE
_START_SECTION_
语源
_START_PARAGRAPH_
SIG是信号名的通用前缀。FPE是floating-point exception（浮点异常）的首字母缩略字。产生SIGFPE信号时并非一定要涉及浮点算术，之所以不修改名字是因为这么做会破坏向下兼容性。
_START_SECTION_
描述
_START_PARAGRAPH_
导致SIGFPE被发送给进程的原因有很多。一个常见的例子是由于一个意外输入导致的溢出，或者在程序构造中的错误。_NEWLINE_SIGFPE可以被处理。也就是说，程序员可以指定他们在接收到信号时想要的动作，例如调用一个子程序，忽略事件等。_NEWLINE_在特定情形下，忽略SIGFPE可能导致程序出现意料之外的行为，包括但不限于由于不断重试违规操作而导致程序挂起。但是，忽略并非由计算造成的SIGFPE信号是安全的，例如通过kill系统调用发送的那些。_NEWLINE_一个通常的疏忽是认为除以零是SIGFPE的唯一来源。在一些架构上（包括IA-32），使用INT_MIN（最小的可以被表示的负整数值）除以-1的整数除法也会触发这个信号，因为商是一个无法被表示的正数。（比如8位有符号整数可以表示-128、+127和它们之间的整数。-128÷-1＝+128 ＞ +127，因此无法被表示而产生溢出并触发此信号）
_START_SECTION_
例子
_START_PARAGRAPH_
这是一个尝试执行一个称为整数除以零，或FPE_INTDIV的错误算术运算的ANSI C程序的例子。_NEWLINE_int main()_NEWLINE_{_NEWLINE_       int x = 42/0;_NEWLINE_       return 0; /* Never reached */_NEWLINE_}_NEWLINE_在一个运行Linux的IA-32上编译运行，产生下列内容：_NEWLINE_$ gcc -o sigfpe sigfpe.c_NEWLINE_sigfpe.c: In function ‘main’:_NEWLINE_sigfpe.c:3: warning: division by zero_NEWLINE_$ ./sigfpe_NEWLINE_Floating point exception (core dumped)_NEWLINE_一个来自gdb的栈跟踪显示在main函数中发生了SIGFPE信号：_NEWLINE_Program received signal SIGFPE, Arithmetic exception._NEWLINE_0x08048373 in main ()