CMPF.FLOAT

Error printed when two float or double value compared using equals operator (==).

Vulnerability and risk

Avoid 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 prevention

Use check great or equals, less or equals or abs different less than something, for example (Math.abs(x1-x2) < MIN_DIFF).

Example 1

9      /**
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