CMPF.FLOATError printed when two float or double value compared using equals operator (==). Vulnerability and riskAvoid equality checks on floating point types because of possible inaccuracy of floating point calculations. The example below can lead to an infinite loop because x1 + 700 times ((x2 - x1) / 700) does not equal to x2, due to inaccuracy. Mitigation and preventionUse check great or equals, less or equals or abs different less than something, for example (Math.abs(x1-x2) < MIN_DIFF). Example 19 /** 10 * Calculates define integral 11 */ 12 public static double integral(MyFunction f, double x1, 13 double x2) { 14 double x = x1; 15 double result = 0; 16 double step = (x2 - x1) / 700; 17 while (x != x2) { // should use (x <= x2) 18 result = result + f.valueFor(x) * step; 19 x = x + step; 20 } 21 return result; 22 } CMPF.FLOAT is reported for line 17: Equality checks on floating point types should be avoided |