Как разные языки программирования обрабатывают деление на 0? - PullRequest
4 голосов
/ 05 марта 2010

Возможно, это не тот вопрос, который нужно здесь задавать, но мне любопытно. Я знаю, что многие языки просто взрываются и терпят неудачу, когда их просят разделить на 0, но есть ли языки программирования, которые могут разумно обрабатывать эту невозможную сумму - и если так, что они делают? Они продолжают обработку, обрабатывая 350/0 как 350, или прекращают выполнение, или как?

Ответы [ 10 ]

4 голосов
/ 05 марта 2010

Малоизвестный язык программирования Java дает специальную константу Double.POSITIVE_INFINITY или Double.NEGATIVE_INFINITY (в зависимости от числителя) при делении на ноль в контексте IEEE с плавающей запятой. Целочисленное деление на ноль не определено и приводит к выбрасыванию ArithmeticException, что весьма отличается от вашего сценария "взрыва и отказа".

3 голосов
/ 05 марта 2010

Стандартная библиотека INTERCAL возвращает #0 при делении на ноль

1 голос
/ 05 марта 2010

В Java деление на ноль в контексте с плавающей запятой дает специальное значение Double.POSITIVE_INFINITY или Double.NEGATIVE_INFINITY.

0 голосов
/ 21 сентября 2018

Я работаю с многогранниками и пытаюсь выбрать язык, который любит инф.Полные ребра многогранника {a, b}, где a - ребра на многоугольник, а b - ребра на угол, - E = 1 / (1 / a + 1 / b - 1/2)

, если E -отрицательный - это отрицательная кривизна, но если E - бесконечность (1/0), то это мозаика плоскости.Примеры: {3,6} {4,4}

0 голосов
/ 10 июля 2010

Числа с плавающей запятой согласно IEEE определяют константы NaN и т. Д. Любая дальнейшая операция, связанная со значением thst, останется неизменной до конца. Целые или целые числа отличаются, за исключением исключений ... В Java ...

0 голосов
/ 05 марта 2010

Python (по крайней мере версия 2, у меня нет 3) выдает ошибку ZeroDivisionError, которую можно перехватить.

num = 42
try:
    for divisor in (1,0):
        ans = num / divisor
        print ans
except ZeroDivisionError:
    print "Trying to divide by 0!"

распечатывает:

42
Trying to divide by 0!
0 голосов
/ 05 марта 2010

Из Википедия :

Бесконечности расширенной строки действительных чисел могут быть представлены в типах данных с плавающей запятой IEEE, так же, как обычные значения с плавающей запятой, такие как 1, 1,5 и т. Д. Они не являются значениями ошибок в любом случае, хотя часто ( не всегда, так как это зависит от округления) используется в качестве значений замены при переполнении. При делении на ноль исключение положительная или отрицательная бесконечность возвращается в качестве точного результата.

0 голосов
/ 05 марта 2010

В Delphi он либо выдает ошибку времени компиляции (если она делится на константное значение 0), либо перехватываемую ошибку времени выполнения, если это происходит во время выполнения.

То же самое для C и C ++.

В PHP вы получите предупреждение:

Предупреждение: деление на ноль в on line X

Итак, в PHP для чего-то вроде:

$i = 123 / 0;

$ я не буду иметь ничего. НО $ i не равен === NULL и isset ($ i) возвращает true, а is_string ($ i) возвращает false.

0 голосов
/ 05 марта 2010

Я был бы удивлен, если какой-либо язык возвращает 350, если вы делаете 350/0. Всего два примера, но Java создает исключение, которое можно поймать. C / C ++ просто падает (я думаю, он генерирует сигнал, который, вероятно, может быть пойман).

...