Концептуально иметь 4/0, чтобы получить произвольное число, было бы не хуже, чем попытка удвоить счет 2000000000, чтобы получить счет -294967296. Однако большинство процессоров игнорирует большинство видов арифметического переполнения, если только один явно не проверяет это, но не может игнорировать попытку деления на ноль, если только один не проверяет заранее операнды заранее (и пропускает операцию, если они недопустимы). Учитывая, что многие процессоры имеют флаги «переполнения», ничто не помешает процессору указать, что попытка деления на ноль просто не должна делать ничего, кроме установки флага переполнения (успешная операция деления должна его очистить); код, который хочет вызвать исключение в таком случае, может сделать это.
Я подозреваю, что причина различного поведения связана с ранними днями работы на компьютере; Аппаратные средства для инструкции деления могли судить, что она была завершена, когда остаток был меньше делителя. Если этого никогда не произойдет, инструкция может остановиться, пока общая схема контрольных часов (предназначенная для оповещения о сбое, если по какой-либо причине команды перестают выполняться) не отключится. Аппаратные средства для обнаружения проблемы и выхода без остановки процессора были бы тривиальными по сегодняшним стандартам, но в те дни, когда компьютеры были построены из дискретных транзисторов, это было дешевле и почти столь же эффективно, чтобы программисты не пытались делить ноль, когда-либо .