Double/Floatでは、小数点から2進表記に変換する際に丸め誤差や精度の低下があります。 たとえば、floatを "6.1"に設定してからもう一度印刷すると、 "6.099999904632568359375"のような報告された値が得られます。 2つのダブルオブジェクトの等価性をチェックするためのより良いオプションです : BigDecimalの または (Math.abs(ダブルサイズ - ダブルサイズ)<イプシロン)を使用するには、Javaの2倍の間の等価性を確認するにはどうすればよいですか
答えて
それはあなたのユースケースに依存します。通貨で作業する場合は、BigDecimalを使用してください。 近似で使用できる場合は、Math.abs(double1 - double2) < epsilon
浮動小数点数は、表現可能な最小値であるイプシロン耐性と呼ばれます。フロートを比較するには、その差が許容範囲内であることを確認します。
Math.abs(a-b) <= EPSILON
もちろん、倍数に収まらないほど大きな数値で作業している場合は、大きな数字の変形を使用する必要があります。 EPSILONはDouble.MIN_VALUEよりも数桁大きい許容差ですが、分散が無視できるほど十分に小さいです。あなたが平等をテストする場合
' Double.MIN_VALUE'は可能な最小の正の 'double'、2 ^( - 1074)です。あなたの式は、 'abs(a-b)'がその値に等しいか、または0である場合にのみtrueを返します。 'Double.MIN_VALUE'はイプシロンとしての使用には適していません。 – ajb
umm、2を掛けても助けになりません。とにかく、 'a'と' b'が等しくない場合、それらの差は2 ^( - 53)より小さくすることはできません。なぜなら、浮動小数点数が表現されているからです。 (そして、イプシロン2 ^( - 53)を作ることで応答しないでください。それでも許容範囲は小さすぎます) – ajb
あなたがおおよその平等、その後Math.abs(d1-d2) < epsilon
等価性をテストするために 'Double.compare'を使う必要はありません。 '=='も同様です。 – ajb
を望む必要がある場合はそれが必要な精度のレベルに基づいて異なるだろうDouble.compare()
またはBigDecimal.
を使用することができます。しかし、Java.lang.Double.equals()メソッドを見てください。
- 1. CoreBluetoothの2つのCBPeripheralsで等価性をテストするにはどうすればよいですか?
- 2. 2つのファイルの一部の等価性を確認する
- 3. 等価性の確認
- 4. 2つの異なる.yファイル間の等価性を確認する
- 5. jqueryの.html()変数と、htmlを生成したレール上のルビとの間の等価性を確認するにはどうすればよいですか?
- 6. Scalaの2つのSpark DataFramesの等価性を確認
- 7. iOS App Storeでアプリの正確な評価を確認するにはどうすればよいですか?
- 8. ブラウザ間での互換性を確認するにはどうすればよいですか?
- 9. 複雑な等価性のためにObject.GetHashCode()を実装するにはどうすればよいですか?
- 10. 2つのdatetimeオブジェクトの時間差を確認するにはどうすればよいですか?
- 11. Clojure関数の等価性を名前で確認する
- 12. Javaで日付が2つの日付の間にあるかどうかを確認するにはどうすればよいですか?
- 13. Javaコンソールログを確認するにはどうすればよいですか?
- 14. 関数型の等価性を比較するにはどうすればよいですか?
- 15. 複合オブジェクトグラフの等価性をテストするにはどうすればよいですか?
- 16. R列の2つのデータフレームの要素の等価性を確認する
- 17. 複数のパンダデータフレームのインデックスの等価性を確認する
- 18. Assert.AreEqualは、2つの汎用IEnumerablesの間の等価性をどのようにして決定しますか?
- 19. ArrayListの要素がJavaの別の値と等しいかどうかを確認するにはどうすればよいですか?
- 20. ES6のSetコレクションの使用に関するクラスインスタンスの平等性と同一性を確認するにはどうすればよいですか?
- 21. Java - シーンがフルスクリーンモードであるかどうかを確認するにはどうすればよいですか?
- 22. javascriptで2つの値がnullに等しくないかどうかを確認するにはどうすればよいですか?
- 23. このような等価配列を高速にするにはどうすればいいですか?
- 24. iPhoneアプリケーションの起動にかかる時間を確認するにはどうすればよいですか?
- 25. クライアント側のJavaScriptでポートの可用性を確認するにはどうすればよいですか?
- 26. Sparkを使用して2つのHDFSデータセットが等しいかどうかを確認するにはどうすればよいですか?
- 27. 2つの値の列の違いを確認するにはどうすればよいですか?
- 28. Androidでは、通貨コードの有効性を確認するにはどうすればよいですか?
- 29. recvfrom()のメッセージサイズを確認するにはどうすればよいですか?
- 30. アプリのフレームレートを確認するにはどうすればよいですか?
あなたが必要とするものによっては、正確な平等、またはおおよその平等があります。これはあなたのニーズに依存しますが、普遍的なルールはありません。 –
[同等のためにjava.lang.Doubleをチェックする実行方法]の複製可能性(http://stackoverflow.com/questions/17971226/performant-way-to-check-java-lang-double-for-equality) – Dth