17 lines
895 B
Plaintext
17 lines
895 B
Plaintext
Floating point math is imprecise because of the challenges of storing such values in a binary representation. Even worse, floating point math is not associative; push a ``++float++`` or a ``++double++`` through a series of simple mathematical operations and the answer will be different based on the order of those operation because of the rounding that takes place at each step.
|
|
|
|
|
|
Even simple floating point assignments are not simple:
|
|
|
|
----
|
|
float f = 0.1; // 0.100000001490116119384765625
|
|
double d = 0.1; // 0.1000000000000000055511151231257827021181583404541015625
|
|
----
|
|
(Results will vary based on compiler and compiler settings.)
|
|
|
|
|
|
Therefore, the use of the equality (``++==++``) and inequality (``++!=++``) operators on ``++float++`` or ``++double++`` values is almost always an error.
|
|
|
|
|
|
This rule checks for the use of direct and indirect equality/inequality tests on floats and doubles.
|