Как стать автором
Обновить

Комментарии 27

по-моему прерывания — это всем другое…
Всегда думал, что прерывания нужны для переключения задач.

Деление на ноль не вызывает бесконечного цикла, результат операции определён как «не определённый», а прерывание к этому случаю впихнули просто потому, что результат пользователю всё равно уже не понадобится, а программисту надо исправлять софт (если конечно его стиль программирования не подразумевает catch по любой специфике предметной области).

Наверное в математических пакетах может иметь смысл деления на ноль, и операция выдаёт вполне внятные результаты математически образованному пользователю без панических прерываний. Нет?
октава пишет:
`
10 / 0
warning: division by zero
ans = Inf
`

-10 / -0 = ?
ans = Inf
НЛО прилетело и опубликовало эту надпись здесь
Сразу видно, что в матане вы сильны.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Да ладно вам, человек наверное впервые после окончания вуза вспомнил что-то из курса (скорее всего пределы), а вы его так сразу слили.
«Сначала, в начальной школе, нам говорят, что нельзя вычитать из большего меньшее. Потом, в старших классах, оказывается, что всё-таки можно. Тогда говорят, что нельзя делить на ноль. Потом, в высшей школе, оказывается, что иногда всё-таки можно.»

Прерывания еще и корректно обработать нужно.
А то будет как в испытаниях мотороловских процессоров в автопилоте истребителей и полетах в районе Мертвого моря.
> Тогда говорят, что нельзя делить на ноль. Потом, в высшей школе, оказывается, что иногда всё-таки можно.
Нет, нельзя. Не создано такой непротиворечивой системы, где можно.
Бесконечно-малые — всё-таки не ноль.
деление на ноль это неопределенность, от неё можно избавиться, ценой появления неопределённости в другом месте.
«Сингулярность, это место, где мы, согласно теории Эйнштейна, делим на ноль. ̶Н̶е̶л̶ь̶з̶я̶ плохо делить на ноль.

Теория струн — это ведь „теория всего“, общая теория поля. Она должна дать ответы на те вопросы, на которые не даёт ответов теория Эйнштейна. Она р̲а̲з̲р̲е̲ш̲и̲т̲ ̲д̲е̲л̲и̲т̲ь̲ ̲н̲а̲ ̲н̲о̲л̲ь̲ легально».
/Нил Деграсс Тайсон, интервью на PBS/
;-)
НЛО прилетело и опубликовало эту надпись здесь
Потом, в высшей школе, оказывается, что иногда всё-таки можно.

Только, пожалуйста, не делайте это часто.
Как раз и не вызывает, потому что эта ситуация предусмотрена заранее. А прерывание предусмотрено не просто так, а для того чтобы в программу не вставлять проверку на «неопределённый результат» после каждой команды деления.
Вместо этого, в случае попытки деления на ноль возникает прерывание, а обработчик этого прерывания в большинстве случаев прерывает выполнение расчёта и отправляет сообщение об ошибке выше. Это если обработчик назначен, иначе прерывание происходит на системном уровне и системе не остаётся ничего другого кроме как прибить процесс в котором возникло это прерывание.
Значит так же логично поднимать прерывания на неуказанную дату рождения, на отсутствие денежного счёта, на неверный формат массы тела, на пустой остаток на складе, выход за предельно допустимую перегрузку манёвра, на многие другие ситуации, с которыми удобнее «не вставлять проверку после каждой команды»? ;-)
Ага. Осталось только ввести в процессоре команды на определение неуказанной даты рождения ;)
Для таких случаев давно изобретён try/catch, если что. Поведение аналогично, только читать и писать проще.
Можно и на ноль делить в блоке try-catch.
Конечно можно. Только по стандарту C++ try/catch ловит только языковые исключения. Всё остальное это нестандартные платформо-специфичные приблуды. В той же винде для отлова SEH'ов надо __try блок использовать.
НЛО прилетело и опубликовало эту надпись здесь
Был такой случай, когда деление на ноль привело к перекомпилляции ядра Linux. Так что осторожно с этим.
Совсем недавно для себя открыл, что в ZX Spectrum при делении на ноль в интерпретаторе Basic выводит сообщение «Number too big».
Зарегистрируйтесь на Хабре, чтобы оставить комментарий