This is because 1.1
is not exactly representable in binary floating-point. But 1.5
is.
As a result, the float
and double
representations will hold slightly different values of 1.1
.
Here is exactly the difference when written out as binary floating-point:
(float) 1.1 = (0.00011001100110011001101)₂
(double)1.1 = (0.0001100110011001100110011001100110011001100110011010)₂
Thus, when you compare them (and the float
version gets promoted), they will not be equal.