Солнце jdk реализация похоже на это:
return v != v;
Кто-либо может объяснить, как это работает?
Значения NaN ничему не равны (если одна сторона равенства - NaN, равенство ложно), поэтому NaN! = NaN. Очевидно, что каждый нормальный double равен самому себе
Нан - единственный двойник, не равный себе. Таким образом, проверка v! = V даст True только для NaN.
Вот что говорится в спецификации Java :
Операторы с плавающей точкой не создают исключений (§11). Операция, при которой переполняется, создает бесконечность со знаком, операция, при которой происходит переполнение, дает денормализованное значение или знаковый ноль, и операция, не имеющая {{ 1}} математически определенный результат дает NaN. Все числовые операции с NaN в качестве операнда производят NaN как результат . Как уже было описано, NaN неупорядочено, поэтому операция числового сравнения с участием одного или двух NaN возвращает false, а любое ! = Сравнение с участием NaN возвращает истину, включая x! = x, когда x равно NaN.