Возможный дубликат:
Почему Java не генерирует исключение при делении на 0,0?
Почему следующий оператор в Java не сообщает об исключении ArithmeticException?
double d = 1.0/0;
Возможный дубликат:
Почему Java не генерирует исключение при делении на 0,0?
Почему следующий оператор в Java не сообщает об исключении ArithmeticException?
double d = 1.0/0;
Вкратце: числа с плавающей запятой могут представлять бесконечность (или даже операции, которые дают значения, не являющиеся числами), поэтому операция, которая приводит к этому (например, деление на 0), является допустимой.
Расширяя ответ Мохаммода Хоссейна, а также это вопрос и принятый на него ответ, создается исключение ArithmeticException «Вызывается при возникновении исключительного арифметического условия». Для целых чисел деление на 0 является таким случаем, но для чисел с плавающей запятой (float
s и double
s) существуют положительные и отрицательные представления.
Например,
public class DivZeroFun {
public static void main(String args[]) {
double f = 5.0;
System.out.println(f / 0);
double f2 = -5.0;
System.out.println(f2/0);
}
}
Этот код будет печатать «Infinity», а затем «-Infinity» в качестве ответов, потому что «Infinity» на самом деле является допустимым значением для float
s и double
s, которое закодировано в Java.
Кроме того, из этого сообщения на форуме :
Представления с плавающей запятой обычно включают + inf, -inf и даже «Not a Number». Целочисленные представления этого не делают. Поведение, которое вы видите, не является уникальным для Java, большинство языков программирования будут делать что-то подобное, потому что это то, что делает оборудование с плавающей запятой (или библиотека низкого уровня).
и снова из сообщения на форуме:
Поскольку используемый стандарт IEEE для чисел с плавающей запятой определяет значения для положительной и отрицательной бесконечности, а также для специального случая «не числа». См. Детали в java.lang.Float и java.lang.Double.
INF
илиNaN
. - person Mysticial   schedule 25.07.2012