2つの浮動小数点値を比較して正確に等しいかどうかを確認するための、エレガントで読みやすく、冗長でない方法とは何ですか?
単純に聞こえるかもしれませんが、それは厄介な問題です。オペレーターはNaNの==
仕事を終わらせず、ゼロの特別な扱いもします。
(+0.0 == -0.0) -> true
Double.NaN == Double.NaN -> false
しかし、2つの値が完全に同じであるかどうかを判断したいと思います(ただし、異なるNaNパターンは気にしないため、NaN==他のNaN->true)。
私はこの醜いモンスターのコードでこれを行うことができます:
Double.doubleToLongBits(a) == Double.doubleToLongBits(b)
これを書く(そして意図を明らかにする)より良い方法はありますか?