Базовая Java на деление на 0.0

Я слышал один поворот в Java. Если кто-то знает правильную причину, вас просят поделиться ею. Вопрос:

double result1 = 1.0/0.0;
sop(result1); // output Infinity
double result2 = 0.0/0.0;
sop(result2); // output NaN

то же самое происходит для float переменная также. но для типа int его повышение ArithmeticException, Зачем?

Примечание: я использую JDK 1,7

2 ответа

Вы не можете представлять бесконечность или NAN, используя int.

От JLS

Результат деления с плавающей запятой определяется правилами арифметики IEEE 754:

Деление ненулевого конечного значения на ноль приводит к бесконечности со знаком. Знак определяется по правилу, указанному выше.

Проверьте объяснение IEEE

Почему деление на ноль (или переполнение, или переполнение) не останавливает программу и не вызывает ошибку? Почему стандарт на числа включает "не число" (NaN)? Модель 754 поддерживает надежные программы. Он предназначен не только для числовых аналитиков, но и для пользователей электронных таблиц, систем баз данных или даже кофейников. Правила распространения для NaN и бесконечностей допускают исчезновение несущественных исключений. Точно так же постепенное снижение поддерживает свойства ошибки в диапазоне точности.

Когда исключительные ситуации требуют внимания, они могут быть рассмотрены немедленно через ловушки или в удобное время с помощью флагов состояния. Ловушки могут быть использованы для остановки программы, но неисправимые ситуации встречаются крайне редко. Простая остановка программы не подходит для встроенных систем или сетевых агентов. Чаще всего ловушки регистрируют диагностическую информацию или заменяют действительные результаты.

Флаги предлагают как предсказуемый поток управления, так и скорость. Их использование требует, чтобы программист знал об исключительных условиях, но пометка флага позволяет программистам откладывать обработку исключительных условий до тех пор, пока это не будет необходимо.

Бесконечные или неопределенные числа не являются частью набора целых чисел, поэтому они исключаются из int а также Integer, То же самое в большинстве языков программирования, а не в Java как таковой.

Но настоящая причина, конечно, историческая. Целые числа использовались для представления двоичной логики с 2 дополнениями. В стандартах не было NaN или же Infinity,

Другие вопросы по тегам