ÚvodBlogy

Manifest Miroslae

Proč 0.1 + 0.2 není 0.3

IT, IEEE 754, Floating Point, technology

Proč 0.1 + 0.2 není 0.3: Tajemství IEEE 754

Kdysi jsem se setkal s kolegou, který se mě zeptal: "Proč počítač říká, že 0.1 + 0.2 != 0.3?" Věřte mi, nejste jediní, kdo se touto otázkou zabývá. Na první pohled se to může zdát jako špatný vtip, ale věřte mi, že je to spíše fascinující ponor do světa binární aritmetiky a standardu IEEE 754.

Co je IEEE 754?

IEEE 754 je standard pro plovoucí desetinnou čárku, který definuje způsob, jakým počítače reprezentují a operují s desetinými čísly. Tento standard je široce používán v moderních počítačích a programovacích jazycích jako je C, Java, nebo Python.

Jak to funguje?

Ve zkratce, čísla v IEEE 754 jsou reprezentována jako kombinace znamenka, mantisy a exponentu. Tato metoda umožňuje reprezentovat velmi malá i velmi velká čísla, ale s jedním háčkem – ne všechna čísla mohou být přesně reprezentována.

Proč 0.1 není přesně 0.1?

I když je 0.1 v desítkové soustavě krásně jednoduché číslo, jeho binární podoba je nekonečná periodická. V binární soustavě je 0.1 reprezentováno jako něco jako 0.00011001100110011... a tak dále. Protože IEEE 754 používá pevný počet bitů pro reprezentaci čísla, musíme toto číslo zaokrouhlit.

Co se stane při 0.1 + 0.2?

Když sečteme 0.1 a 0.2, počítač používá zaokrouhlené binární reprezentace obou čísel, což vede k výsledku, který je velmi blízko, ale ne přesně 0.3. Například v Pythonu to může vypadat takto:

>>> 0.1 + 0.2
0.30000000000000004

Ano, to je důvod, proč 0.1 + 0.2 není striktně rovno 0.3!

Proč na tom záleží?

Možná si říkáte: "Proč bych se tím měl zabývat?" Pravdou je, že pochopení, jak počítače pracují s čísly, je klíčové pro každého, kdo pracuje s numerickými výpočty. To zahrnuje věci jako vědecké simulace, finanční výpočty, nebo dokonce herní fyziku.

Příklady z praxe

  • Finanční výpočty: Pokud pracujete s penězi, je důležité zaokrouhlovat na správný počet desetin. Mnoho systémů používá celé číslo centů namísto dolarů pro přesnost.
  • Vědecké simulace: Při modelování fyzikálních procesů může i malá odchylka vést k nesprávným výsledkům.
  • Hry: Fyzikální enginy často musí brát v úvahu tyto nepřesnosti, aby zajistily konzistentní herní zážitek.

Jak to řešit?

Existují různé strategie, jak se s těmito problémy vypořádat. Jednou z nich je používat celé čísla tam, kde je to možné, nebo speciální knihovny pro přesné výpočty (např. Decimal v Pythonu).

Další možností je zvýšit počet použitých bitů pro reprezentaci (např. použitím double namísto float), což může snížit, ale ne zcela eliminovat, chyby zaokrouhlování.

Závěr

IEEE 754 je fascinující téma, které nám ukazuje, jak i něco tak "jednoduchého" jako matematika může mít svá úskalí v digitálním světě. Doufám, že tento článek vám pomohl pochopit, proč 0.1 + 0.2 není přesně 0.3 a že vás motivoval k dalšímu zkoumání tohoto zajímavého tématu.