Деление на ноль


Определение

Деление на ноль - логическая программная ошибка, зачастую приводящая к ошибке времени выполнения, которая заключается в попытке деление любого числа на делитель, равный нулю.

Поведение программы

Возникновение ошибки времени выполнения зависит от многих факторов: как от языка и платформы разработки, так и от типа делимых чисел.

Согласно параграфу 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).

Библиографический список


Найденные ошибки

Проверено проектов
361
Собрано ошибок
13 417

А ты совершаешь ошибки в коде?

Проверь с помощью
PVS-Studio

Статический анализ
кода для C, C++, C#
и Java

goto PVS-Studio;