2017-11-03 10 views
0

SonarQubeにはruleがあります。このコードでは、「浮動小数点数は等しいかどうかをテストするべきではありません。」というバグが報告されています。一般的にこのルールは正当ですが、この場合は偽陽性のようです。そうであれば、Double.compareのコンストラクトを使用して回避するのではなく、+/-InfinityNaNなどの中間結果をチェックするのではなく、そのようにフラグを立てたいと思います。 denominator == 0.0dを比較してゼロ除算を防ぐのは正しいですか?

public void f(double denominator) 
{ 
    if (denominator == 0.0d) 
     throw new IllegalArgumentException("Division by zero."); 

    // code that involves division by denominator ... 
} 

従って質問は:上記のコードはIllegalArgumentExceptionをスローしない場合とdenominator除算(double Sを含有する式でのみ)+/-Infinity又はNaN中間値をもたらす場合にのみ?

答えて

0

バイナリで小数を表現する振る舞いのために、テストフロートが等価であることを避けるべきです。

質問した質問は本質的に、上記のコードは機能しますか? 明示的パラメータとして0.0を渡して、代わりにf((0.4-0.1)-0.3)ような何かをやっていない、特に場合は、どのように使われるかfによっては、0

P.S.に非常に近い小数でキャッチし、分裂しません小数精度を使用する場合は、BigDecimalを使用します。

関連する問題