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

Možná jste se někdy setkali s překvapivou situací při výpočtech s plovoucí desetinnou čárkou v programování: 0.1 + 0.2 se nerovná 0.3. Jak k tomu může dojít? Odpověď se skrývá v IEEE 754 standardu, který definuje, jak jsou čísla s plovoucí desetinnou čárkou reprezentována počítači.

Co je IEEE 754?

IEEE 754 je standard pro reprezentaci čísel s plovoucí desetinnou čárkou v počítačích. Tento standard zajišťuje, že různé počítačové systémy budou mít shodné výsledky při provádění aritmetických operací. To je klíčové pro přenositelnost softwaru napříč různými platformami.

Reprezentace čísel

IEEE 754 používá binární systém, aby popsal čísla s plovoucí desetinnou čárkou. Číslo je rozděleno na tři části:

  • Sign bit: Určuje, zda je číslo kladné nebo záporné.
  • Exponent: Určuje velikost čísla.
  • Mantissa (nebo Significand): Určuje přesnost čísla.

Problém spočívá v tom, že ne všechna desetinná čísla mohou být přesně reprezentována v binárním formátu. Například, 0.1 v desítkové soustavě je periodické číslo v binárním formátu, což vede k drobným nepřesnostem.

Proč 0.1 + 0.2 není 0.3?

Když v počítači sečteme 0.1 a 0.2, výsledkem je číslo, které se velmi blíží 0.3, ale není to přesně 0.3 kvůli zmíněným nepřesnostem při převodu do binárního formátu. To může být pro začátečníky matoucí, ale je to důsledkem toho, jak počítače pracují s čísly.

Praktické důsledky

Tato nepřesnost může mít důsledky v oblastech, kde je kladen důraz na přesnost, jako je například finanční výpočty nebo vědecké simulace. Proto je důležité při práci s čísly s plovoucí desetinnou čárkou vždy zvážit zaokrouhlování výsledků nebo použít alternativní metody, jako jsou fixní desítková čárka nebo knihovny pro práci s velmi přesnými čísly (např. BigDecimal v Javě).

Závěr

IEEE 754 je nepostradatelný pro moderní výpočetní techniku, ale má svá omezení. Rozumět těmto omezením je klíčové pro správné použití aritmetiky s plovoucí desetinnou čárkou. Až se příště setkáte s tím, že 0.1 + 0.2 není 0.3, budete vědět, proč a jak se s tím vypořádat.