Вопрос

В Java (Number/0) выдает ArithmeticException, в то время как (Number/0.0) = Бесконечность.Почему это происходит?

Это было полезно?

Решение

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

Другими словами, каждый битовый шаблон в int представляет собой обычное целое число;значения с плавающей запятой несколько сложнее с + / - бесконечностью, значениями "не число" (NaN), нормализованными значениями, субнормальными значениями и т.д.

Другие советы

Отсюда

Стандарт IEEE с плавающей запятой, поддерживаемый почти всеми современными процессорами, определяет, что каждая арифметическая операция с плавающей запятой, включая деление на ноль, имеет четко определенный результат.Стандарт поддерживает ноль со знаком, а также бесконечность и NaN (не число).Есть два нуля, +0 (положительный ноль) и -0 (отрицательный ноль), и это устраняет любую двусмысленность при делении.В арифметике IEEE 754 a ÷ +0 означает положительную бесконечность, когда a является положительным, отрицательную бесконечность, когда a является отрицательным, и NaN, когда a = ±0.Вместо этого знаки бесконечности меняются при делении на -0.

Целочисленное деление на ноль обычно обрабатывается иначе, чем с плавающей запятой, поскольку для результата нет целочисленного представления.Некоторые процессоры генерируют исключение при попытке разделить целое число на ноль, хотя другие просто продолжат и сгенерируют неверный результат деления.Результат зависит от того, как реализовано деление, и может быть либо равен нулю, либо иногда максимально возможному целому числу.

Также вы можете проверить JLS, в котором говорится:

15.17.2 Оператор разделения
С другой стороны, если значение делителя при целочисленном делении равно 0, то генерируется ArithmeticException.

Результат деления с плавающей запятой определяется спецификацией Арифметики IEEE:Если результат не равен NaN, знак результата положительный, если оба операнда имеют один и тот же знак, отрицательный, если операнды имеют разные знаки.
Деление ненулевого конечного значения на ноль приводит к бесконечности со знаком.Знак определяется по правилу, изложенному выше.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top