CS.FLOAT.EQCHECK

使用等号运算符(==、!=)比较了两个浮点值或两个双精度值。

漏洞与风险

由于浮点计算可能错误,避免对浮点类型进行相等性检查。下面的示例可能导致无限循环,因为由于计算错误,x1 + 700 * ((x2 - x1) / 700) 不等于 x2。

示例 1

复制
  class Math {
      public static double integral(MyFunction f, double x1, double x2) {
          double x = x1;
          double result = 0;
          double step = (x2 - x1) / 700;
          while (x != x2) {                   // defect, (x <= x2) should be used instead
              result = result + f.valueFor(x) * step;
              x = x + step;
          }
         return result;
     }
 }