První český samočinný počítač SAPO
SAPO

Aritmetika včera a dnes

Kapitola první

Násobíme chytře?

Máme-li za úkol vynásobit dvě přirozená čísla a k dispozici tužku a papír, většina z nás použije algoritmus, který jsme se učili už na základní škole:
47
    53
141
235  
2491
Přesto ale algoritmů pro násobení existuje velké množství. Kromě algoritmů, které urychlují násobení zpaměti a na papíře, také prozkoumáme efektivní algoritmy pro počítačové násobení.

Násobení v binární soustavě a redundantní binární soustavě není pro člověka běžné. Lidé totiž díky deseti prstům provádějí výpočty v soustavě desítkové, tj. čísla zapisují pomocí mocnin desítky a cifer od 0 do 9. Se soustavou binární ovšem pracuje valná většina počítačů.

  1. Binární soustava
    Každé přirozené číslo n lze právě jedním způsobem vyjádřit ve tvaru:
    n = ak2k + ak-12k-1 + ... + a121 + a020,
    kde koeficienty ak, ak-1, ..., a1, a0 nabývají hodnot nula nebo jedna. Řetězci ak ak-1 ... a1 a0 říkáme binární zápis čísla n. Připomeňme, že binární zápis se získá hladovým algoritmem:
    • Chceme-li najít binární zápis čísla 13, podíváme se, jakou nejvyšší mocninu dvojky číslo 13 obsahuje. To je 8.
    • Poté od 13 odečteme 8 a pro získaný rozdíl 5 opět najdeme největší mocninu dvojky, kterou číslo 5 obsahuje. To je 4.
    • Na závěr spočteme rozdíl 5 - 4 = 1, a to je nultá mocnina dvojky.
    • Získáme 13 = 8 + 4 + 1, a tedy číslo 13 má v binární soustavě zápis 1101.
    Násobení v binární soustavě je velmi podobné jako nám známé klasické násobení v desítkové soustavě. Například číslo 11 s binárním zápisem 1011 a číslo 5 s binárním zápisem 101 se vynásobí následujícím způsobem:
    Binární násobení
    Výsledek je 32 + 16 + 4 + 2 + 1 = 55. Všimněme si, že rychlost násobení odpovídá počtu jedniček v binárním zápisu násobitele (v našem případě jsou dvě jedničky v binárním zápisu 5), právě tolik sčítání totiž musíme provést.
    Program na binární násobení.
  2. Redundantní binární soustava
    Připusťme nyní v binární soustavě cifry -1, 0 a 1. Zápisy čísel už nejsou jediné možné, soustava je redundantní. Například 15 = 8 + 4 + 2 + 1 a taky 15 = 16 - 1, tedy jak 1111 tak i 10001 jsou zápisy 15 v redundantní binární soustavě. Vyberme zápis s maximálním počtem nul. K tomu stačí aplikovat následující přepisovací pravidla, dokud je co přepisovat:
    01111 → 10001
    0111110001
    11 → 01
    11 → 01
    Zatímco průměrný počet nul ve standardním binárním zápisu je 1/2, v redundantním binárním zápisu s maximálním možným počtem nul jsou to 2/3. Jelikož je rychlost násobení úměrná počtu nul, je jasné, že redundantní binární soustava je pro násobení velkých čísel výhodnější. Na závěr ještě poznamenejme, že násobíme analogicky jako v klasické binární soustavě. Pouze u znamének dáváme pozor: při násobení cifer stejného znaménka má výsledek znaménko plus, při násobení cifer opačného znaménka má výsledek znaménko mínus. Tedy například násobení 11 a 5 proběhne následovně:
    Redundantní binární násobení
    Výsledek je tedy 64 - 8 - 1 = 55.
Program na násobení v redundantní binární soustavě.

nahoru

Klasické násobení označuje násobení dvou přirozených čísel zadaných pomocí zápisů v bázi b, kde b je přirozené číslo větší nebo rovno 2. Binární zápis (b = 2) a desítkový zápis (b = 10) jsou speciální případy zápisu čísel v bázi b s ciframi 0, 1, ..., b-1.