Глава 4 · Python любит числа

Сравниваем float правильно

== почти никогда не подходит для float. Разберём правильный инструмент — math.isclose().

Раз 0.1 + 0.2 не равно ровно 0.3 (раздел 4.11), прямое сравнение через == для float — плохая идея:

sravnenie_ploho.py
print(0.1 + 0.2 == 0.3)  # False!

math.isclose() — сравнение «достаточно близко»

Правильный инструмент — сравнение с допуском (tolerance): вместо «равно точно» проверяем «достаточно близко»:

isclose_demo.py
from math import isclose

print(isclose(0.1 + 0.2, 0.3))  # True
Не изобретайте свой допуск на глаз
Часто встречается самодельная проверка вроде abs(a - b) < 0.000001. Она работает не всегда — для очень больших или очень маленьких чисел фиксированный порог может оказаться слишком строгим или слишком мягким. math.isclose() по умолчанию использует относительный допуск (пропорциональный размеру самих чисел), что гораздо надёжнее для чисел разного масштаба.
otnositelnyj_dopusk.py
from math import isclose

print(isclose(1000.0001, 1000.0002))  # True — разница мала относительно размера чисел
print(isclose(0.0001, 0.0002))        # False — та же абсолютная разница, но огромна относительно размера
Практика: почините сравнение float
Интерактивный ноутбук прямо в браузере — замените == на math.isclose()
Открыть практику →