2つの浮動小数点値を正確に比較するエレガントで読み易く冗長でない方法は何ですか?2つの浮動小数点値が正確かどうかを確認する
聞こえるほどシンプルで、その悪い問題です。 ==
オペレータは、NaNのために仕事を得るし、またゼロのための特別な処理ありません。
(+0.0 == -0.0) -> true
Double.NaN == Double.NaN -> false
をしかし、私は二つの値がまったく同じかどうかを判断したい(しかし、私は別のNaNのためにないケアを行いますパターンなので、任意のNaN ==他のNaN - > true)。
I コードのこの醜いモンスター作品でこれを行うことができます。これを書き(と意図明らかにする)ためのより良い方法が
Double.doubleToLongBits(a) == Double.doubleToLongBits(b)
ありますか?
あなたはこれをやりたい理由はありません。彼らが本当に浮動小数点数の場合、あなたの答えは意味がありません。 – Julian
@Julian非常に意味のある例の一つとして、PeterLawreyの答えを参照してください。しかし、私のアプリケーションは、浮動小数点数が主キーの一部である(私の選択ではない)オブジェクトのequals()メソッドです。浮動小数点は通常、直感的な仮定に反します。したがって、私は辺のケースをカバーするように注意しています。 – Durandal
申し訳ありませんが、あなたは "醜いモンスターのピース"はすでに完璧です、それをより良くすることはできませんでした... –