Вы сравниваете два разных типа значений: double и float.Подумайте об ограничениях размера с неточными числами.
Точные значения (десятичные)
A -> 1/2 с 5 десятичными числами - 0,5000
B -> 1/2с 10 десятичными знаками - 0,5000000000
A == B всегда будет возвращать true
Неточные значения (десятичные дроби)
A -> 1/3 с 5 десятичными знаками - 0,33333
B -> 1/3 с 10 десятичными знаками - это 0,3333333333
A == B -> всегда будет возвращать false, потому что они не совпадают.
Аналогично, 0,55 нельзя представитьточно в двоичном, но 0,5 может быть.
двоичное представление 0,55d -> 0,10001100110011001101 ...
поэтому они не будут равны
двоичное представление 0,5d-> 0,1
Значит, они будут равны
Надеюсь, это очистит ваше сомнение