Что такое элегантный, читаемый и невербальный способ сравнения двух значений с плавающей запятой для точного равенства?
Проще, как это может показаться, его злая проблема. Оператор ==
не выполняет работу над NaN и также имеет специальное лечение для нуля:
(+0.0 == -0.0) -> true
Double.NaN == Double.NaN -> false
Но я хочу определить, являются ли два значения одинаковыми (но мне не нужны разные шаблоны NaN, поэтому любой NaN == любой другой NaN → true).
Я могу сделать это с этой уродливой частью кода монстра:
Double.doubleToLongBits(a) == Double.doubleToLongBits(b)
Есть ли лучший способ написать это (и сделать очевидным намерение)?