You are comparing two types of values: double and float.
Think about the limitations of size with inexact numbers.
An example:
Exact values (decimal)
value1 -> 1/2 with 5 decimals is 0.50000
value2 -> 1/2 with 10 decimals is 0.5000000000
then
value1 == value2 -> returns true
Inexact values (decimal)
value3 -> 1/3 with 5 decimals is 0.33333
value4 -> 1/3 with 10 decimals is 0.3333333333
then
value3 == value4 -> returns false because they aren't the same.
0.1 cannot be represent exactly in binary (like 1/3 in decimal) but 0.5 can be.
The binary representation of 0.1d -> 0.000(1100)1100110011...
The binary representation of 0.5d -> 0.1