Почему Java не выдает Исключение при делении на 0,0?

У меня есть код для вычисления процентной разницы между 2 числами - (oldNum - newNum) / oldNum * 100; - где оба из чисел doubles. Я ожидал должным быть добавлять своего рода проверку / обработка исключений в случае, если oldNum 0. Однако, когда я сделал тестовый прогон со значениями 0,0 и для oldNum и для newNum, выполнение, продолженное, как будто ничего не произошло, и никакая ошибка не была брошена. Выполнение этого кода с ints определенно вызвал бы арифметическое исключение деления на нуль. Почему Java игнорирует его когда дело доходит до doubles?

68
задан Aziz Shaikh 1 October 2012 в 09:46
поделиться

3 ответа

Математически результатом деления на ноль является undefined , что может быть выражено с помощью числа с плавающей запятой / двойного (как NaN - не число), это не однако ошибочен в любом фундаментальном смысле.

Поскольку целое число должно содержать определенное числовое значение, при делении на ноль при работе с ними должна возникать ошибка.

46
ответ дан 24 November 2019 в 14:08
поделиться

Типы Java float и double , как и практически любой другой язык (и практически любое оборудование FP), реализуют стандарт IEEE 754 для математических операций с плавающей запятой, который требует деления на ноль для возврата специального «бесконечного» значения. Создание исключения фактически нарушит этот стандарт.

Целочисленная арифметика (реализованная как представление с дополнением до двух Java и большинством других языков и аппаратных средств) отличается и не имеет специальной бесконечности или значений NaN, поэтому создание исключений является полезным поведением.

111
ответ дан 24 November 2019 в 14:08
поделиться

Способ хранения double сильно отличается от int. См. http://firstclassthoughts.co.uk/java/traps/java_double_traps.html для более подробного объяснения того, как Java обрабатывает двойные вычисления. Вы также должны прочитать о числах с плавающей запятой, в частности о концепции Not a Number (NaN) .

Если вы хотите узнать больше о представлении с плавающей запятой, я бы посоветовал прочитать этот документ (формат Word, извините). Он углубляется в двоичное представление чисел, что может быть полезно для вашего понимания.

5
ответ дан 24 November 2019 в 14:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: