为什么整数除以零会导致浮点异常?

Tay*_*mon 15 c divide-by-zero

在C程序中除以零会导致错误消息的异常终止Floating point exception (core dumped).这对于浮点除法并不足为奇,但为什么在整数除以零时会这样说呢?整数除法实际上是否使用引擎盖下的FPU?

(顺便说一下,这都是在x86下的Linux上.)

Oli*_*rth 22

整数除法实际上是否使用引擎盖下的FPU?

不,Linux也只是在这种情况下生成SIGFPE(它是一个遗留名称,其使用现已扩展).实际上,单Unix规范将SIGFPE定义为" 错误的算术运算 ".


mil*_*ose 5

man signal 提到:

整数除以零具有未定义的结果。在某些架构上,它会生成一个 SIGFPE 信号。(同样将最大负整数除以 -1 可能会生成 SIGFPE。)


小智 5

我对此的历史解释的猜测是,原始的 unix 硬件不会在整数除以零时生成陷阱,所以这个名字SIGFPE是有道理的。(PDP 汇编程序员,确认?)然后当系统被移植(或者在 Linux 的情况下,重新实现)到带有整数除以零陷阱的硬件时,添加一个新的信号号被认为是不值得的,所以旧的获得了新的含义,现在有一个有点令人困惑的名字。