CS.FLOAT.EQCHECK
2 つの float 値または double 値が equality 演算子 (==, !=) を使用して比較されます。
脆弱性とリスク
浮動小数点計算は精度に問題を生じる可能性があるため、浮動小数点型に対する等価チェックは避けてください。下記の例では、計算精度の問題で x1 + 700 * ((x2 - x1) / 700) が x2 にならない (* は乗算記号) ため、無限ループを生じる可能性があります。
例 1
1 class Math { 2 public static double integral(MyFunction f, double x1, double x2) { 3 double x = x1; 4 double result = 0; 5 double step = (x2 - x1) / 700; 6 while (x != x2) { // defect, (x <= x2) should be used instead 7 result = result + f.valueFor(x) * step; 8 x = x + step; 9 } 10 return result; 11 } 12 }