...
Code Block | ||
---|---|---|
| ||
class WideSample { public static void main(String[] args) { int big = 1234567890; // The significand can store at most 23 bits if(Integer.highestOneBit(big) >> Math.pow(2, 23)) { throw new ArithmeticException(""Insufficient precision""); } float approx = big; System.out.println(big - (int)approx); // Prints zero when no precision is lost } } |
...
Search for vulnerabilities resulting from the violation of this rule on the CERT website.
Other Languages
This rule appears in the C Secure Coding Standard as FLP36-C. Beware of precision loss when converting integral types to floating point.
...
INT31-J. Do not rely on the write() method to output integers outside the range 0 to 255 06. Integers (INT) INT34-J. Perform explicit range checking to ensure integer operations do not overflow