Как работает Double.isNaN ()? - PullRequest
8 голосов
/ 21 апреля 2010

Реализация Sun jdk выглядит следующим образом:

return v != v;

Может кто-нибудь объяснить, как это работает?

Ответы [ 2 ]

13 голосов
/ 21 апреля 2010

Значения NaN не равны чему-либо (если одна сторона равенства равна NaN, равенство равно false), поэтому NaN! = NaN. Очевидно, что каждый нормальный дубль равен себе

4 голосов
/ 21 апреля 2010

Нан - единственный дубль, который не равен самому себе. Таким образом, проверка v! = V приведет к истине только для NaN.

Вот что говорит Java спецификация :

Операторы с плавающей точкой не производят исключения (§11). Операция, которая переполнение производит бесконечность со знаком, операция, которая приводит к потере памяти, производит денормализованное значение или ноль со знаком, и операция, которая не имеет математически определенный результат производит NaN. Все числовые операции с NaN в качестве операнда производят NaN как результат. как уже было описан, NaN неупорядочен, поэтому операция числового сравнения с участием один или два NaN возвращают false и любой ! = сравнение с возвратом NaN истина, включая x! = x, когда x равен NaN.

...