Rozdział 4 · Python lubi liczby

Poprawne porównanie float

== prawie nigdy nie jest odpowiednie dla float. Przyjrzyjmy się odpowiedniemu narzędziu — math.isclose().

razy 0.1 + 0.2 nie równa dokładnie 0.3 (Rozdział 4.11), bezpośrednie porównanie za pomocą == float jest zły Pomysł:

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

math.isclose() – Porównanie „Wystarczająco blisko”

Poprawne narzędzie – porównaj z tolerancją (tolerance): zamiast "dokładnie równe" "Wystarczająco blisko":

isclose_demo.py
from math import isclose

print(isclose(0.1 + 0.2, 0.3))  # True
Nie wymyślaj własnej tolerancji na oko
Często jest to domowy czek, taki jak abs(a - b) < 0.000001. Nie zawsze to działa — dla bardzo dużych lub bardzo małych liczb stały próg może być zbyt surowy lub zbyt łagodny. math.isclose() domyślnie względny tolerancja (proporcjonalna do rozmiaru samych liczb), która jest znacznie bardziej wiarygodna dla liczb różnych skali.
otnositelnyj_dopusk.py
from math import isclose

print(isclose(1000.0001, 1000.0002))  #True – Różnica jest niewielka w stosunku do rozmiaru liczb
print(isclose(0.0001, 0.0002))        #False – ta sama różnica absolutna, ale ogromna w porównaniu do rozmiaru
Praktyka: Napraw porównanie float
Interaktywny notebook bezpośrednio w przeglądarce — zamień == na math.isclose()
Otwórz praktykę →