Деление на 0 в разных языках

В школе нас учили, что делить на ноль нельзя. Если слишком не углубляться в различные математические абстракции, то можно признать, что деление на ноль недопустимо. Однако как обстоят дела в программировании, где правила немного отличаются?

Большинство современных языков программирования следуют IEEE 754. С вещественными числами всё понятно, там при делении на ноль будет либо +Infinity, либо -Infinity во всех этих языках, кроме случая деления самого вещественного нуля на вещественный ноль, в котором результатом будет NaN (not-a-number). Но существуют языки программирования, где деление с вещественными числами работает иначе. Кто-нибудь знает такие?

JavaScript:

Java:

Для целых чисел арифметика работает немного по-другому. В стандарте IEEE 754 при делении на ноль должна возникать ошибка, что делить на ноль нельзя.

В JavaScript просто нет типа целых чисел, поэтому я не могу там провести эти опыты.

Java же строго следует IEEE 754:

C# полностью соответствует IEEE 754, как и Java:

Для C++ ситуация несколько сложнее. В нём при делении на ноль всегда возникает неопределённое поведение (как для вещественных, так и для целых чисел), так как C++ не обязательно должен работать только на процессорах, реализующих IEEE 754. В зависимости от компилятора, архитектуры, оптимизации и т. д. могут возникать разные результаты.

Python тоже не следует IEEE 754. В нём деление на ноль всегда приводит к ошибке ZeroDivisionError:

Как думаете, для чего это сделано в Python?

Получается, что существуют языки, которые следуют IEEE 754, а также существуют языки, которые определяют своё собственное поведение, руководствуясь какими-нибудь своими соображениями.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *