2010-03-05 2 views
3

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

+1

Вы спрашиваете о языках или языковых реализациях? Не все языки предписывают точное поведение, и поэтому оно зависит от реализации. –

+0

Задайте вопрос о том, как каждый отдельный язык может рассматривать сценарий. Некоторые увлекательные ответы, которые я получал, просто любопытно, что делает каждый язык. – Jack

ответ

0

От Wikipedia:

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

0

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

+1

Существует два разных языка C и C++, и я не думаю, что у каждого из них есть какое-то конкретное положение в их стандартах. Некоторые реализации одного или двух языков могут подавлять сигналы. –

1

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

+3

или 'Double.NaN', если вы делите нуль на ноль. – mob

4

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

+2

Как вы удваиваете бесконечность? Разве это не дает вам бесконечности? Моронические умы хотят знать! –

+0

Кроме того, если вы не удваиваете число, это делает его числом? –

+0

@ T.E.D На самом деле, некоторые бесконечности больше, чем другие из-за скорости, с которой они расширяются, например. SUM (1..n) - меньшая бесконечность, чем SUM (1^2 ... n^2), поскольку n приближается к бесконечности (это связано с ограничениями в математике) –

0

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

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

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

Предупреждение: Деление на ноль в <file.php> на линии X

Так, в PHP, для чего-то например:

$i = 123/0; 

$ i будет ничто. BUT $ i не === NULL и isset ($ i) возвращает true, а is_string ($ i) возвращает false.

+0

, если вы получаете только предупреждение, что выражение вернуть? –

+0

Обновленный ответ с дополнительной информацией. – AlexV

2

В INTERCAL стандартной библиотеки возвращает #0 на деление на ноль

0

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

Версия 3.1 по-прежнему вызывает ZeroDivisionError. – dan04

0

числа с плавающей точкой согласно IEEE определяет константы NaN и т.д. Любое продолжение операции с участием THST значения будет оставаться неизменными до конца. Целочисленные или целые числа отличаются друг от друга с исключениями ... В java ...

Смежные вопросы