14

二重比較を行うためのJavaライブラリはありますか?例えば

public static boolean greaterThanOrEqual(double a, double b, double epsilon){
     return a - b > -epsilon;
}

私が開始するすべてのプロジェクトは、これを再実装し、コードをコピーして貼り付け、テストすることになります。

注意:サードパーティのJARを使用する方が良い理由の良い例は、IBMが次のことを推奨していることです。

「基礎となる測定値のスケールがわからない場合は、「abs(a / b-1)<イプシロン」というテストを使用すると、単に差を比較するよりも堅牢になる可能性があります。」

多くの人がこれを考えていたとは思えず、単純なコードでさえ最適ではない可能性があることを示しています。

4

3 に答える 3

18

グアバは持っていDoubleMath.fuzzyCompare()ます。

于 2012-07-09T07:49:00.127 に答える
2

標準のJavaライブラリには、実際に問題を処理する方法はありません。Joachimのリンクをたどって、ニーズに非常に適したライブラリを使用することをお勧めします。ただし、頻繁に追加できるutilsライブラリを作成することをお勧めします。あなたがあなたの質問で述べたものとして使用された方法、あなたの問題の異なる実装に関しては、あなたはこれを調べることを検討するべきです:

Java二重比較イプシロン

その他のあいまいさについては、お気軽にお問い合わせください

于 2012-07-09T08:10:20.723 に答える
2

素朴な「最大絶対差」アプローチ(Guavaなど)を使用するライブラリは控える必要があります。BruceDawsonの優れた記事ComparingFloatingPoint Numbers、2012 Editionで詳しく説明されているように、非常に限られた範囲の値でしか機能しないため、エラーが発生しやすくなります。はるかに堅牢なアプローチは、近似比較に相対差またはULPを使用することです。

私が知っている唯一のライブラリは、正しい近似比較アルゴリズムを実装していますapache.common.math

于 2015-03-01T07:04:25.730 に答える