Деление на ноль - логическая программная ошибка, зачастую приводящая к ошибке времени выполнения, которая заключается в попытке деления любого числа на делитель, равный нулю.
Возникновение ошибки времени выполнения зависит от многих факторов: как от языка и платформы разработки, так и от типа делимых чисел.
Согласно параграфу 5.6 стандарта языка Си++, если вторым операндом операторов "/" или "%" является 0, то в этом случае поведение не определено.
Попытка деления на целочисленный ноль на процессоре семейства x86 или x86_64 приводит к возникновению аппаратного исключения (по вектору 0); соответственно программа на Си или Си++, скомпилированная в машинный код, аварийно завершается при выполнении этого действия.
В то же время, если переменная, содержащая ноль, была вещественной - согласно стандарту IEEE 754, результатом будет вещественное число "плюс бесконечность" или "минус бесконечность" (согласно тому же стандарту, ноль также имеет знак) в случае ненулевого числителя, и "не-число" в случае неопределенности 0/0 (компилятор Microsoft Visual C++ возвращает специфичное для платформы x86 число "неопределенность").
Следует учитывать, что сама переменная не обязательно должна содержать именно 0. Ноль может возникнуть при округлении, называемом исчезновением порядка (arithmetic underflow) - когда в результате операции получается число, значением меньше машинной точности. В таком случае результат считается равным 0.
Ошибка деления ноль может отслеживаться некоторыми компиляторами (например, Microsoft Visual C++) и статическими анализаторами.
Особенно внимательно надо быть при делении на переменную-итератор цикла. Легко можно упустить из виду, что итератор в какой-то момент проходить через нулевое значение. Для этого в статическом анализаторе может быть использована специальная диагностика (например, V609 в анализаторе PVS-Studio).
0