По той же причине, что нет целого числа NaN
на любом другом языке.
Современные компьютеры используют двоичное представление двоичного дополнения 2 для целых чисел, и это представление не имеет значения NaN. (Все значения в области типа представления представляют определенные целые числа.)
Из этого следует, что компьютерное целочисленное арифметическое оборудование не признает никакого представления NaN.
Теоретически, кто-то может изобрести альтернативное представление для целых чисел, которое включает NaN (или INF, или какое-либо другое экзотическое значение). Однако арифметика с использованием такого представления не будет поддерживаться аппаратным обеспечением. Хотя можно было бы реализовать его в программном обеспечении, было бы слишком дорого стоить ... и нежелательно в других отношениях включить эту поддержку в язык Java.
1 - Это, конечно, относительный, но я бы предположил, что программная реализация NaNs будет (по крайней мере) на порядок медленнее, чем аппаратное обеспечение. Если вы действительно, действительно, нуждались в этом, тогда это было бы приемлемо. Но подавляющее большинство целочисленных арифметических кодов не нуждается в этом. В большинстве случаев бросать исключение для «делить на ноль» просто отлично, и на порядок замедлить во всех целочисленных арифметических операциях ... неприемлемо.
В отличие:
- "неиспользованные" значения в пространстве представления уже существуют
- NaN и INF значения являются частью стандарта IEE с плавающей точкой, и
- они (обычно), реализованный на основе аппаратной реализации арифметики с плавающей запятой
Поскольку спецификация с плавающей точкой указывает значение «NaN», и соответствующая реализация должна вести правильный путь обработки.Целочисленная реализация не существует, и нет никакого способа явно сказать «недопустимое значение» [связанное] (http://en.wikipedia.org/wiki/NaN#Integer_NaN), [related2] (http://stackoverflow.com/ Вопросы/3949457/can-an-integer-be-nan-in-c) –
Возможный дубликат [Почему деление на ноль с номерами с плавающей запятой (или двойной точностью) не вызывает java.lang.ArithmeticException:/by zero в Java ] (http://stackoverflow.com/questions/12954193/why-does-division-by-zero-with-floating-point-or-double-precision-numbers-not) – Lion
Заглянув в историю вопроса, я отметил ваш вопрос с Java как языком программирования. Если вы говорите о другом языке, пожалуйста, пометьте как таковой. – Lion