Деление на ноль – одна из самых известных ошибок в вычислительной технике. Однако даже до цифровой эры вычисления с делением на ноль могли приводить в хаос механические калькуляторы, сталкиваясь с невозможным, или, точнее, с «неопределенной операцией». Яркий пример демонстрирует видеоролик, опубликованный энтузиастом математики и науки Vixhal в X (ранее Twitter). На нём 1950-х годов, технологическое чудо, с бешеной скоростью вращает свои шестерёнки и, по всей видимости, “взывает” о смазке и выключении, после того, как ему приказано погрузиться в математическую бездну.
Знаменитый микропроцессор 4004 Intel, выпущенный в 1971 году, известен тем, что разрабатывался для того, чтобы стать сердцем калькулятора. Однако даже этот чип не имел встроенного оборудования для обработки ошибок деления на ноль. Фактически, в его ограниченном наборе инструкций даже не поддерживалась простая инструкция деления.
Тем не менее, калькулятор Busicom 141-PF, который был первым коммерческим продуктом на базе чипа Intel, включал прошивку для обнаружения деления на ноль и отображения сообщения об ошибке. Это значительно предпочтительный исход по сравнению с аварийным завершением работы, бесконечным циклом вычислений или проявлением других неожиданных сбоев.
Инструкции обработки ошибок деления на ноль на уровне оборудования появились только с выпуска процессора 8086 в 1978 году. Этот знаменитый CPU с архитектурой x86 впервые представил нативную инструкцию DIV, а также генерировал исключение DE (аппаратный ответ) при обнаружении делителя, равного нулю.
Этот шаг Intel в какой-то степени помог защитить приложения для вычислений от ошибок деления на ноль. Однако важным шагом на пути к нейтрализации этих проблем стало появление в 1985 году стандарта IEEE 754, который добавил обработку чисел с плавающей запятой, генерируя Infinity (бесконечность) или NaN (не число) вместо аварийного завершения работы. Это дебютировало в широко используемом оборудовании, начиная с математического сопроцессора Intel 80387.
В 2025 году, хотя современные ядра операционных систем могут перехватывать исключения деления на ноль на аппаратном уровне, предотвращая сбои и неожиданное поведение, некоторые приложения и игры всё ещё могут сталкиваться с проблемами, если разработчики не предвидели такую ситуацию. Сообщения на Reddit и форумах от игроков в World of Warcraft (WoW), датированные всего лишь несколькими месяцами назад, свидетельствуют о том, что в игре до сих пор возникали сбои INT_DIVIDE_BY_ZERO на CPU Raptor Lake/Refresh и в начале 2025 года.
Но если вы столкнулись со сбоем приложения или игры в 2025 году, возможно, вспомните о несчастном механическом калькуляторе 1950-х годов, прежде чем перезагружать компьютер.
Автор – Mark Tyson




