为什么在整数算术异常中要使用SIGFPE?

8

为什么将SIGFPE用于整数算术异常,如除以零,而不是创建专门的信号来处理整数算术异常或在首次命名信号时为算术异常一般命名?


1
我正在查看这个特定的答案和它的评论:https://dev59.com/1WQn5IYBdhLWcg3wTlsS#16929175 - root
@root:这似乎是有道理的,如果没有更明确的答案提交,我可能会接受它。我这里有一本PDP-11手册,索引只显示浮点处理器的异常。 - Eric Postpischil
1个回答

1

IEEE Std 1003.1 Standard将SIGFPE定义为:

错误的算术运算。

它并没有明确提到浮点操作。其背后的原因并不清楚,但我对此有自己的看法。

x86 FPU可以同时处理整数和浮点数据,使用诸如FIDIV之类的指令,因此不清楚将浮点数据除以整数零是否会生成浮点或整数点异常。

此外,在80486之前(与ISO/ANSI C标准同时发布的年份),x86 CPU根本没有浮点功能,浮点协处理器是一个独立的芯片。软件浮点模拟可以用来代替芯片,但它使用了CPU内置的ALU(整数算术逻辑单元),这会引发整数异常。


这不是坏的猜测,但你应该意识到x86芯片大约晚了十年才会影响信号用于何种目的。如果有答案来回答这个问题,它可能在UNIX最初开发的1970年代小型计算机的行为中找到。 - zwol

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接