为什么将SIGFPE
用于整数算术异常,如除以零,而不是创建专门的信号来处理整数算术异常或在首次命名信号时为算术异常一般命名?
IEEE Std 1003.1 Standard将SIGFPE定义为:
错误的算术运算。
它并没有明确提到浮点操作。其背后的原因并不清楚,但我对此有自己的看法。
x86 FPU可以同时处理整数和浮点数据,使用诸如FIDIV
之类的指令,因此不清楚将浮点数据除以整数零是否会生成浮点或整数点异常。
此外,在80486之前(与ISO/ANSI C标准同时发布的年份),x86 CPU根本没有浮点功能,浮点协处理器是一个独立的芯片。软件浮点模拟可以用来代替芯片,但它使用了CPU内置的ALU(整数算术逻辑单元),这会引发整数异常。