Ú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?

Když jsem se poprvé setkal s matematickým paradoxem, že 0.1 + 0.2 není rovno 0.3 v některých programovacích jazycích, zůstal jsem zaskočený. Jak je to možné? V tomto článku se pokusím rozmotat tento rébus a vysvětlit, jak je to spojeno s IEEE 754 Floating Point Standard.

Co je IEEE 754?

IEEE 754 je průmyslový standard pro reprezentaci čísel s pohyblivou řádovou čárkou. Možná si teď říkáte, proč je to tak důležité? No, většina moderních procesorů a programovacích jazyků používá tento standard pro výpočty s čísly, která mají desetinné části. Díky tomu můžeme reprezentovat velmi malá i velmi velká čísla na počítači.

Čísla s plovoucí desetinnou čárkou

Čísla s plovoucí desetinnou čárkou, neboli floating-point numbers, jsou reprezentovány pomocí mantisy a exponentu. To je podobné, jako když píšete vědeckou notaci, například 6.022 x 10^23. V kontextu počítače je ale všechno vyjádřeno v binární podobě.

Problém s přesností

Zatímco vědecká notace v matematice je velmi přesná, binární reprezentace v počítačích má své limity. Například číslo 0.1 nemá přesnou binární reprezentaci. Je to podobné, jako když se snažíte vyjádřit třetinu v desítkové soustavě - dostanete 0.3333... a tak dále do nekonečna.

Proč 0.1 + 0.2 není 0.3?

Když sečteme 0.1 a 0.2 v prostředí, které používá IEEE 754, dostaneme výsledek, který je velmi blízký 0.3, ale ne přesně 0.3. Je to kvůli tomu, že binární reprezentace těchto čísel v IEEE 754 není přesná. Když je sečteme, drobné chyby v přesnosti se sčítají a výsledkem je nepřesnost, kterou vidíme.

Praktické dopady

Tento jev není jen teoretickou kuriozitou. V praxi může ovlivnit finanční výpočty, vědecké simulace a další aplikace, kde je přesnost klíčová. Proto je důležité mít na paměti, že aritmetika s plovoucí desetinnou čárkou má své limity a v některých případech je lepší použít jiné metody pro zajištění přesnosti, například knihovny pro práci s racionálními čísly nebo celými čísly.

Závěr

Doufám, že vám tento článek pomohl osvětlit, proč 0.1 + 0.2 není rovno 0.3 a jaké jsou důsledky použití IEEE 754 ve vašich projektech. Mějte na paměti, že i když je standard IEEE 754 velmi užitečný, není všemocný a má své limity, které je třeba respektovat.