Jak člověk a počítače pracují s čísly

Josef Myslín  |  Technika

Abychom dokázali porozumět tomu, jak počítače pracují, musíme napřed pochopit jejich pohled na číselné soustavy.

Když se někoho zeptáte, co je to počítač, mnoho lidí vám odpoví, že se jedná o stroj na výpočty. Dnes samozřejmě mají počítače mnoho jiných úkolů, ale přesto výpočty opravdu jsou to, kvůli čemu počítače vznikly a k čemu se do dnešních dnů velmi často využívají. Dokonce i tam, kde to přímo nevidíte, se ukrývají často tisíce různých výpočtů.

Běžně předpokládáme, že počítače provádějí výpočty velmi rychle a také naprosto přesně. S prvním tvrzením lze souhlasit – nejmodernější počítače mohou provádět miliardy operací za jedinou sekundu, ty nejlepší dokonce ještě více.

Druhé tvrzení už není tak jednoznačné. Počítač – pokud nedojde k poruše, tedy odchylce od normálního projektovaného stavu – skutečně nedělá chyby v tom smyslu, jaký máme obvykle na mysli. Může však dojít ke stavu, který se liší od stavu očekávaného. Lze však hovořit o chybě? Abychom na tuto otázku dokázali odpovědět, musíme si nejprve ukázat, jak počítač s čísly pracuje.

Naše číselná soustava – desítková soustava

Začneme tam, kde žádné problémy nejsou, v oblasti celých čísel. My lidé se od počítačů odlišujeme v jedné zásadní skutečnosti. Pracujeme v jiné číselné soustavě.

Naše číselná soustava se nazývá desítková, což znamená, že základem této soustavy je číslo deset. Tato soustava obsahuje 10 cifer, ze kterých se skládá číslo – jsou to číslice 0 až 9 („nula“„devítka“ ). Pomocí jednotlivých číslic jsme schopni vyjádřit prvních deset čísel, které nazýváme „nula“„devět“. Číslice je tedy znak-symbol, číslo je pak vyjádřením nějaké skutečnosti pomocí číslic.

Jestliže bychom chtěli vyjádřit číslo o jedno vyšší, pak by nám číslice již nestačily. Musíme si proto pomoci malým trikem – posuneme se o řád výše – číslo „deset“ tedy vyjádříme pomocí číslic „jednička“ a „nula“ . 4Takto můžeme pokračovat až do čísla „devadesát devět“ , což je číslo vyjádřené pomocí dvou „devítek“ . Zde se opět dostáváme „do úzkých“. Řešením je opět posunout se o řád výše a číslo „sto“ vyjádřit pomocí číslic „jednička“ a dvou po sobě jdoucích „nul“. Výsledek pak vypadá následovně: 100 . A takto bychom mohli pokračovat bez nadsázky až do nekonečna.

Každé číslo bychom tedy mohli zapsat následujícím způsobem:

Čísla AN až A0 mohou nabývat hodnot 0 až 9. Například číslo 1774 můžeme pomocí tohoto zápisu zapsat takto:

Základem je, jak vidíte, vždy desítka. A proto se soustava nazývá desítková, cizím slovem pak dekadická. Důvodem, proč se ujala, je nejspíše fakt, že zdravý člověk má deset prstů. Počítání na prstech je běžné pro malé děti, ale přiznejme se, že si jím mnohdy vypomáháme i my dospělí.

Ne všechny národy však používaly desítkovou soustavu. Například v Sumeru či Akkadu využívali soustavu šedesátkovou, cizím slovem sexagesimální. Dnes můžeme pozůstatky této soustavy najít zejména v tom, že hodinu rozdělujeme na šedesát minut a minutu na šedesát sekund. Rovněž starší jednotky „tucet“ či „kopa“ mají prapůvod v jiné než desítkové soustavě.

Dnes většina lidstva využívá výše uvedenou soustavu desítkovou, která nám připadá výjimečná. Není výjimečná. Jen proto, že ji odmala využíváme, učíme se jí a jsme na ni zvyklí, nám výjimečná připadá. Ve skutečnosti jsou všechny soustavy rovnocenné.

Číselná soustava počítače – dvojková soustava

Počítače pracují v dvojkové neboli binární soustavě. Základem této soustavy je tedy dvojka a pro zápis čísel máme k dispozici pouze dvě číslice: „nulu“ a „jedničku“. Z těchto číslic jsme však schopni poskládat všechna celá čísla stejně dobře jako v desítkové soustavě.

Začínáme tedy s číslem „nula“. To zvládneme zapsat pomocí číslice „nula“. Zde tedy nevidíme žádný rozdíl oproti desítkové soustavě. Stejné je to u čísla „jedna“. Ale u čísla „dvě“ by mohl nastat problém – další číslici již ve dvojkové soustavě nemáme. Řešení je však naprosto stejné jako v soustavě desítkové. Posuneme se o řád výše. Číslo „dvě“ ve dvojkové soustavě tedy napíšeme pomocí číslice „jedna“ a „nula“  – výsledkem je číslo 10.

V případě, že není jasné, zda zápis 10 znamená „číslo deset v desítkové soustavě“ nebo „číslo dvě ve dvojkové soustavě“, přidáváme tuto informaci – 102, 1010. Nyní je tedy identifikace číselné soustavy a tím i interpretace čísla jednoznačná. Číslo ve dvojkové soustavě můžeme zapsat následujícím způsobem:

Čísla AN až A0 mohou nabývat hodnot 0 nebo 1. Například číslo 1011012 (ekvivalentem je 4510) můžeme pomocí tohoto zápisu zapsat takto:

Jak vidíte, princip je naprosto stejný jako u desítkové či jiné soustavy. Rovněž princip různých matematických operací je totožný – v jakékoli soustavě můžeme sčítat, odčítat, násobit, dělit a mnoho dalšího.

Převody mezi soustavami

Problém nastává v tom, že asi nebudeme chtít opustit svou drahou desítkovou soustavu a natrvalo se usídlit v království soustavy dvojkové jen proto, abychom mohli využívat počítače. Všimněte si, že i při mocninném zápisu čísla ve dvojkové soustavě vlastně využíváme soustavu desítkovou. Musíme tedy najít způsob, jak z vyjádření čísla v jedné soustavě získáme vyjádření v soustavě jiné.

Začneme opět jednodušším postupem: jak z vyjádření v binární soustavě získat vyjádření téhož čísla v desítkové soustavě. V tomto článku se obecně budeme věnovat pouze převodům mezi dvojkovou a desítkovou soustavou, neboť pouze tyto jsou pro nás důležité – lze ovšem definovat obecné postupy převodů z jakékoliv soustavy do jakékoliv jiné.

Představte si, že máte výše uvedené číslo 1011012 a potřebujeme získat jeho ekvivalent v desítkové soustavě. Proto ještě jednou uvedu mocninný zápis tohoto čísla.

Pro převod do desítkové soustavy plně postačuje provést naznačené početní úkony. Tedy:

Opačný postup je lehce obtížnější, ale rovněž snadno pochopitelný a také snadno aplikovatelný v praxi. Mějme tedy číslo 4510 a zkusme si ukázat, jak jej převedeme na odpovídající binární zápis. Intuitivně je nám zřejmé, že bychom měli dostat opět číslo 1011012. Jak ovšem uvidíme příštím článku, tato intuice nás občas může zklamat a může vést i k závažným problémům.

Zde ovšem vše zafunguje tak, jak očekáváme svým selským rozumem. Postup je následující – číslo budeme opakovaně celočíselně dělit základem a budeme vždy zjišťovat zbytek po tomto dělení. Protože základ je dvě, možné zbytky jsou pouze jedna (v případě lichého čísla) a nula (v případě sudého čísla). Takto budeme pokračovat až do chvíle, kdy dosáhneme nuly. Zbytky napsané v opačném pořadí nám dají číslo ve dvojkové soustavě. Více osvětlí následující praktický příklad.

  • 45 : 2 = 22 (zbytek 1)
  • 22 : 2 = 11 (zbytek 0)
  • 11 : 2 = 5 (zbytek 1)
  • 5 : 2 = 2 (zbytek 1)
  • 2 : 2 = 1 (zbytek 0)

Zapíšeme-li zbytky v opačném pořadí, než v jakém jsme je získali, dostaneme číslo 1011012. Opravdu jsme se dostali ke stejnému číslu, se kterým jsme začínali. Převod celých čísel z jedné soustavy do druhé je tedy jednoznačný a proces je plně reverzibilní.

A jak je to v počítači?

Nejmenší jednotkou paměti počítače je byte. Už se zažila jeho počeštěná varianta bajt, budeme ji proto používat i my. Jeden bajt se skládá z osmi bitů a bit není nic jiného než reprezentace jedné binární číslice (ostatně název vznikl z anglického binary digit – tedy binární číslice). Osm bitů – bajt – pak umožňuje uložení binárního čísla o maximálně osmi číslicích.

Největší číslo, které lze tedy do jednoho bajtu uložit, je číslo 111111112. Kdybychom na toto číslo aplikovali výše uvedený postup, zjistíme, že se jedná o číslo 25510. Potřebujeme-li ukládat větší čísla, budeme potřebovat více bajtů:

  • 1 bajt = 255
  • 2 bajty = 65 536
  • 3 bajty = 16 777 216
  • 4 bajty = 4 294 967 296
  • 5 bajtů = 1 099 511 627 776

Co tedy počítač vlastně provádí? K tomu, abychom mohli s počítačem pracovat, potřebujeme různé programy, v prvé řadě pak operační systém. Operační systém převezme náš vstup v podobě čísla v desítkové soustavě. Toto číslo je převedeno na číslo v dvojkové soustavě postupem odpovídajícím tomu, který jsme představili výše.

Takto získané binární číslo uloží do paměti, kterou si předem tzv. alokuje, tedy vyhradí. Čím je číslo větší, tím více paměti si musí operační systém alokovat. Pokud s tímto číslem chceme pracovat, provede počítač interně příslušné výpočty ve své, tedy ve dvojkové soustavě. Jakmile požádáte o výsledek, dojde k opětovnému převodu čísla do desítkové soustavy a toto číslo je vám příslušným způsobem zobrazeno.

Protože tento postup je reverzibilní, nemůže dojít k žádnému problému. Čísla se zobrazí tak, jak mají. Alespoň pokud se bavíme o celých číslech. Ve druhé části článku si ukážeme, že u desetinných čísel může dojít k problémům a tyto problémy si také řádně vysvětlíme.

Nejčtenější