ÚvodBlogy

Manifest Miroslae

Proč 0.1 + 0.2 Není 0.3

IT, IEEE 754, plovoucí čárka, technology

IEEE 754: Proč 0.1 + 0.2 ≠ 0.3

Možná se vám to stalo při programování: zadáte jednoduchý příklad 0.1 + 0.2 a očekáváte výsledek 0.3, ale počítač vám vrátí něco jako 0.30000000000000004. Proč tomu tak je a jaké to má důsledky v praxi?

Co je IEEE 754?

IEEE 754 je standard pro reprezentaci čísel v plovoucí desetinné čárce. Tento standard definuje, jak počítače reprezentují a manipulují s desetinnými čísly. Používá se v téměř všech moderních procesorech a programovacích jazycích.

Jak plovoucí desetinná čárka funguje?

Čísla v plovoucí desetinné čárce jsou reprezentována ve formátu signifikant × základnaexponent. Obecně se používá základna 2, což znamená, že čísla jsou uložena jako binární hodnoty.

Proč 0.1 a 0.2 vedou k chybě?

Desetinná čísla jako 0.1 a 0.2 nemají přesnou binární reprezentaci. Když je tedy chcete uložit v binární formě, musíte je zaokrouhlit. To vede k malým chybám, které se při aritmetických operacích kumulují.

0.1 v binární formě je přibližně 0.00011001100110011...
0.2 v binární formě je přibližně 0.0011001100110011...

Když tyto dvě hodnoty sečtete, výsledek není přesně 0.3, ale něco jako 0.30000000000000004.

Praktické důsledky

Tato nepřesnost může mít v praxi mnoho důsledků. Například ve finančních aplikacích, kde je přesnost klíčová, mohou tyto chyby vést k nepřesným výsledkům. Proto se v takových případech často používají celé čísla nebo speciální knihovny, které zajišťují vyšší přesnost.

Jak se s tím vypořádat?

  • Použijte knihovny pro přesné desetinné výpočty, jako je Decimal v Pythonu.
  • Pokud je to možné, používejte celá čísla místo plovoucí desetinné čárky.
  • Buďte si vědomi těchto omezení a zahrňte je do svých testů a kontrolních mechanismů.

Závěr

IEEE 754 je pro moderní výpočetní techniku zásadní, ale je důležité pochopit jeho omezení. Může se to zdát jako drobnost, ale ve světě výpočetní techniky může mít i malá chyba velké následky. Takže až příště uvidíte, že 0.1 + 0.2 není 0.3, budete vědět proč a jak to napravit.