Přetečení (overflow)

Teď už víš, že procesor pracuje s čísly v nějakém rozsahu. Zároveň už ale víš, jak procesory pracují s negativními čísly přes dvojkový doplněk.

Co se stane, když výsledek matematické operace je větší, než rozsah výsledného čísla?

Z minulé kapitoly už víš, že 1 bajtový (8 bitový) rozsah je v případě dvojkového doplňku číslo mezi -128 a +127.

Co když chceš sečíst číslo 100 + 54 = +154?
+154 se ti tam nevejde, nejvyšší možná hodnota je +127.

Máš na výběr.

  • Výsledek můžeš uložit do čísla s větším rozsahem, například jako integer (232)
  • Výsledek se stejně pokusíš narvat do bajtu – dojde k přetečení

Přetečení je to, co se stane, když výsledek operace přesahuje rozsah, do kterého se číslo vejde. (Podtečení (underflow) je totéž ale na druhou stranu, když je číslo menší, než je záporná hranice čísla.)

100 + 54 = 154 matematicky v desítkové a dvojkové číslené soustavě vypadá takto.

  • 100 = 11001000
  • 54 = 00110110
  • 154 = 10011010

Jenže ve dvojkovém doplňku to vypadá jinak!

  • 100 = 11001000
  • 54 = 00110110
  • 154 = 10011010 = -102

Není to problém?

Je to důležité znát ale většinou toto problém není. Až budu mluvit o programovacích jazycích tak se dozvíš, že většina normálních programovacích jazyků považuje přetečení za chybu, tudíž se ajťák nemusí bát, že by k přetečení někde došlo bez povšimnutí.

xkcd

Teď bys měl bejt schopnej pochopit tenhle komiks.

Ajťák počítá ovečky
Zdroj: xkcd

Souhrn

  • Přetečení je situace, kdy se do čísla vymezeného určitým rozsahem snažíš narvat hodnotu, která se tam nevejde.
  • V dnešní době už přetečení automaticky hlídá konkrétní programovací jazyk.