▶️Хотите взорвать себе мозг?
При смешивании типов возможно неочевидное поведение, можете проверить:
>>> x = (1 << 53) + 1
>>> x + 1.0 < x
True
▶️Здесь всё дело в том, что в одной части неравенства при приведении
x к другому типу была потеряна точность, а в другой части — нет.Значение переменной
x конвертируется в тип float.При этом
x непредставим точно в виде float, поэтому выбирается ближайшее (меньшее здесь) представимое число: x —> float(x-1). Поэтому сумма получается неточной, вся цепочка выглядит так:x+1.0 -> float(x-1)+1.0 -> (x) -> float(x-1)
Сравнение
float < int происходит точно. Значение x (int) математически больше x+1.0 (float).Как-то так.
📎 Вот ещё некоторые примеры смешения типов
@pythonl
