Как указывает та страница, на которую вы ссылаетесь, «хотя SIGFPE не обязательно включает в себя арифметику с плавающей точкой, невозможно изменить ее имя без нарушения обратной совместимости».
Причина, по которой вы получаетесигнал из-за способа, которым работают числа дополнения двух.Диапазон для числа дополнения шестнадцати битов (например) составляет -32768..32767
.
Другими словами, 65 536 возможных значений отображаются в этом диапазоне.Если вы попытаетесь опровергнуть INT_MIN
, нет представления, которое даст вам правильное значение (у нас нет 32768
доступного для нас).
Это относится ко всем двум дополнительным числам: восемь битов дают вам -128..127
, тридцать два бита дают вам -2147483648..2147483647
.
Во всех этих случаях INT_MIN
не имеет положительного эквивалента.
Интересно, что два другихСхемы кодирования, допускаемые ISO C (дополнение и знак / величина), имеют прямое взаимно-однозначное соответствие между положительными и отрицательными значениями).Не менее интересно, их почти никто не использует: -)