Почему SIGFPE использовался для исключений целочисленной арифметики c? - PullRequest
7 голосов
/ 08 февраля 2020

Почему SIGFPE использовалось для целочисленных арифметических c исключений, таких как деление на ноль, вместо создания отдельного сигнала для целочисленных арифметических c исключений или именования сигнала в первую очередь для арифметических c исключений вообще?

1 Ответ

0 голосов
/ 11 февраля 2020

Стандарт IEEE 1003.1 определяет SIGFPE как:

Операция с ошибочной арифметикой c.

И в действительности не упоминается с плавающей запятой операции. Причина этого четко не указана, но вот мое мнение.

x86 FPU может работать как с целочисленными данными, так и с плавающей запятой одновременно с такими инструкциями, как FIDIV, поэтому неясно, будет ли деление плавающих данных poitn на целое ноль приведет к исключению с плавающей или целочисленной точкой.

Кроме того, до 80486 (выпущенного в том же году, что и стандарт ISO / ANSI C) процессоры x86 не имели Возможности с плавающей точкой вообще, сопроцессор с плавающей точкой был отдельным чипом. Вместо чипа можно использовать программную эмуляцию с плавающей точкой, но в ней используется встроенный в ALU ЦП (целочисленная арифметическая c -логическая единица), который генерирует целочисленные исключения.

...