Почему выполняется приведение Double. NaN в int не генерирует исключение в Java?

Итак, я знаю, что IEEE 754 определяет некоторые специальные значения с плавающей запятой для значений, которые не являются действительными числами. В Java преобразование этих значений в примитив int вызывает исключение not , как я и ожидал. Вместо этого мы имеем следующее:

int n;
n = (int)Double.NaN; // n == 0
n = (int)Double.POSITIVE_INFINITY; // n == Integer.MAX_VALUE
n = (int)Double.NEGATIVE_INFINITY; // n == Integer.MIN_VALUE

В чем причина того, что не выбрасывает исключения в этих случаях? Это стандарт IEEE, или это просто выбор разработчиков Java? Существуют ли плохие последствия, о которых я не знаю, возможны ли исключения с такими преобразованиями?

18
задан Michael McGowan 3 May 2011 в 22:16
поделиться