1 Teoria informacji - Instytutu Informatyki UJ

Transkrypt

1 Teoria informacji - Instytutu Informatyki UJ
Uniwersytet Jagielloński
Jacek Lembas, Rafał Kawa
Wstęp do informatyki
Kraków 2011/2012
Spis treści
Spis treści .............................................................................................................................................................. 2
1 Systemy liczbowe................................................................................................................................................ 3
1.1 Wprowadzenie .......................................................................................................................................................... 3
1.1.1 Podstawowe pojęcia i klasyfikacja .......................................................................................................................................3
1.1.2 Różnorodność systemów liczbowych ...................................................................................................................................4
1.1.3 Szczególność systemu binarnego .........................................................................................................................................5
1.2 Konwersje między systemami .................................................................................................................................. 8
1.2.1 Konwersja do systemu dziesiętnego ....................................................................................................................................8
1.2.2 Konwersja części całkowitej do systemu niedziesiętnego ...................................................................................................9
1.2.2.1 Konwersja między systemami niedziesiętnymi ........................................................................................................................... 10
1.2.3 Konwersja części ułamkowej do systemu niedziesiętnego................................................................................................12
1.2.4 Ułamki okresowe ................................................................................................................................................................14
1.2.5 Zależności podstaw systemów............................................................................................................................................16
Indeks .................................................................................................................................................................. 20
2
1 Systemy liczbowe
1.1 Wprowadzenie
Bezprzymiotnikowe pojęcie liczby, jako bytu czysto abstrakcyjnego jest domeną z pogranicza matematyki i filozofii,
zmieniało się w czasie i nie będziemy się nim zajmować przyjmując, że jest intuicyjnie znane. Założymy ponadto znajomość podstawowych kategorii liczb obdarzonych przymiotnikami, to jest liczb naturalnych, całkowitych, wymiernych, rzeczywistych, zespolonych i kilku innych kategorii znanych z podstawowego kursu matematyki. Wszystkie są
precyzyjnie matematycznie zdefiniowane.
1.1.1 Podstawowe pojęcia i klasyfikacja
Wiedząc mniej lub bardziej intuicyjnie czym jest liczba, możemy określić pojęcie systemu liczbowego, traktowanego jako zespół reguł stosowanych do zapisu liczb. System obejmuje podstawowe znaki graficzne służące do przedstawiania liczb, nazewnictwo oraz właśnie reguły jakim podlega łączenie mniejszych elementów zapisu w większe struktury.
Istotnym składnikiem systemu liczbowego są podstawowe symbole graficzne obrazujące liczby. Nazwanie ich cyframi byłoby dużym uproszczeniem, ponieważ pojęcie cyfry (zdefiniowane dalej) jest w zasadzie zastrzeżone dla pozycyjnych systemów liczbowych (również opisanych dalej) – dlatego właściwszym będzie słowo znak. Większość kultur
wypracowało własne znaki obrazujące liczby, ale stosunkowo rzadko były to osobne znaki służące wyłącznie liczbom częściej stosowano znaki pisma (w pismach alfabetycznych litery) zastępujące wybrane liczby.
Inny ważny składnik systemów liczbowych stanowią szczególne liczby wykorzystywane w swoich wielokrotnościach do tworzenia większych liczb. Dość często tą szczególną rolę pełni liczba dziesięć, ale wcale tak być nie musi,
a co więcej - szczególnych liczb może być więcej niż jedna. Opisana dalej formalnie, ale znana intuicyjne podstawa systemu liczbowego jest zacieśnieniem szczególnego traktowania wybranej liczby.
Bez względu na ilość i wartości szczególnych liczb stosowanych w ich wielokrotnościach, systemy liczbowe możemy podzielić na addytywne i pozycyjne.
W systemach addytywnych liczba zapisywana jest w postaci zbioru stosowanych znaków, zaś wartość liczby wyznaczana jest jako suma liczb odpowiadających pojedynczym znakom zapisu. Systemy addytywne naturalnie wyewoluowały z zapisu liczb w postaci pionowych kresek w ilości odpowiadającej wartości liczby, przekreślanych poziomo
(w porcjach na przykład pięciu) dla ułatwienia zliczania. Wciąż używanym systemem addytywnym (choć nie do końca)
jest rzymski zapis liczb.
W systemach pozycyjnych liczba zapisywana jest jako ciąg (nie zbiór) znaków (zwanych cyframi) o ustalonym
kierunku (najczęściej zgodnie z kolejnością zapisu liter w słowach – co oznacza że nie zawsze od lewej strony do pra3
wej). Wartość liczby jest sumą cyfr przemnożonych przez potęgę szczególnej wartości (zwanej podstawą systemu),
a pozycja cyfry wyznacza wykładnik potęgi. Jak widać z powyższego opisu, najpowszechniej używany system liczbowy
jest właśnie systemem pozycyjnym.
Podział na systemy addytywne i pozycyjne nie jest dychotomiczny, ponieważ znane są systemy mieszane. Najbardziej znanym jest system liczbowy starożytnej Mezopotamii, gdzie wprawdzie „cyfra” była liczbą składaną addytywnie z mniejszych cyfr, ale każdy zespół cyfr był mnożony przez potęgę „podstawy” systemu (wynoszącą akurat 60 ).
Wspomniany rzymski system zapisu liczb trudno nazwać w pełni addytywnym, chyba że addytywność rozumiemy
w jej matematycznym sensie. Zapis liczby na przykład 2378 to MMCCCLXXVIII , gdzie addytywność jest wyraźnie widoczna ( 1000  1000  100  100  100  50  10  10  5  1  1  1 ). Ale rozważmy liczbę 449 , w zapisie rzymskim mającą
postać CDXLIX . Sekwencje znaków CD , XL , IX oznaczają odjęcie liczby pierwszego znaku sekwencji od liczby drugiego znaku – skąd formalnie rzymski zapis liczb należałoby nazwać addytywno-subtraktywnym.
1.1.2 Różnorodność systemów liczbowych
Używany najpowszechniej system dziesiętny stanowi naturalną pochodną dziesięciu palców ludzkich dłoni, ale nie jest
jedyny. Ludzkość używała i używa systemów liczbowych z innymi „podstawami” – gdzie cudzysłów oznacza wspomnianą wyżej liczbę stosowaną w jej wielokrotności a nie podstawę w rozumieniu jedynie systemu pozycyjnego. Najprostszy addytywny system liczbowy, który tylko zlicza znaki jedności (można go zatem nazwać jedynkowym) początkował wszystkie inne systemy. Jednakże nie zaginał całkowicie i właśnie komputery spowodowały odrodzenie stosowania systemu jedynkowego. Jednym z teoretycznych modeli obliczeń (z możliwą nie tylko wirtualną ale i fizyczną realizacją) jest omówiony w następnych rozdziałach model maszyny Turinga wprost korzystający z systemu jedynkowego.
System dwójkowy jako podstawowy w informatyce zostanie omówiony osobno i nie są znane jego zastosowania
w jakichkolwiek przeszłych kulturach. Ale już system trójkowy jest praktycznie stosowany w szczególnej postaci islamskiego różańca zwanego subha, zaś niektóre pierwsze komputery stosowały system trójkowy zamiast binarnego.
System czwórkowy stosowany jest w genetyce jako pochodna czteroelementowego zbioru nukleotydów w kodzie DNA,
a system piątkowy wart jest szczególnej uwagi. Rzymski system liczb korzysta z dziesiątki, ale również właśnie z piątki.
Ponadto niezależnie od siebie różne kultury Dalekiego Wschodu, Afryki, cywilizacje prekolumbijskie, aborygeni
w Australii i plemiona Amazonii używają niezależnie od siebie systemu piątkowego. System piątkowy w oczywisty
sposób jest pochodną ludzkiej anatomii stanowiąc naturalną konkurencję systemu dziesiątkowego i nie są znane powody dla których przegrał z systemem dziesiątkowym. Idąc dalej, system szóstkowy stosowany jest do dziś na Nowej
Gwinei, ale okazuje się że plemiona ugrofińskie (przodkowie dzisiejszych Finów oraz Węgrów) również stosowały system szóstkowy. System siódemkowy mimo szerokich konotacji kulturowych nie był nigdzie stosowany w przeciwieństwie do systemu ósemkowego – stosowanego nie tylko w komputerach, ale do dziś używanego przez niektóre ple4
miona północnoamerykańskich Indian. Z kolei system jedenastkowy stosowany jest od niedawna, ale w bardzo szczególnej formie. Co najmniej kilku autorów science-ficton, a w ślad za nimi scenarzystów filmowych i autorów gier narzuciło system jedenastkowy kreacjom swoich światów.
System dwunastkowy, choć wyraźnie nieanatomiczny zasługuje na osobne traktowanie. Kulturowa rola liczby 12
jest olbrzymia – od dwunastu bogów olimpijskich, dwunastu apostołów, dwunastu plemion Izraela, dwunastu imamów islamu szyickiego po dwanaście gwiazd w symbolu Unii Europejskiej. Co jeszcze ciekawsze, wiele kultur posługuje się dwunastoma znakami zodiaku i (nie tak często) dwunastoma miesiącami kalendarza niezależnie od siebie.
Większość języków ma osobne słowo na liczebnik dwanaście i jego wielokrotności – czego przykładem może być polski tuzin oraz gros (tuzin tuzinów). Dwunastka stanowi podstawę godzinowego podziału czasu, a próba zamiany na
system dziesiętny podjęta w czasach Rewolucji Francuskiej nie przyjęła się. Stosunkowo niedawno brytyjski system
monetarny pozbył się dwunastki z ubolewaniem rezygnując z możliwości prostego równego podziału okrągłego rachunku w restauracji na trzy osoby.
System trzynastkowy stosowany był w kalendarzu Majów, system piętnastkowy wśród niektórych plemion Oceanii, a spośród systemów o wyższych podstawach na uwagę zasługuje system dwudziestkowy. Można go uznać za system anatomiczny w równym stopniu jak system piątkowy, równie jak piątkowy konkurencyjny w stosunku do systemu
dziesiętnego i zarazem używany był niezależnie przez wiele kultur. Stosowali go i Majowie, i Hindusi, niektóre narody
z terenów obecnych Chin, ale również Celtowie. Z kolei jedne z najstarszych światowych cywilizacji, powiązane wzajemnie cywilizacje Mezopotamii, Sumeru i Babilonii stosowały system sześćdziesiątkowo-dziesiątkowy, do dziś zachowany w rachubie czasu.
Koncepcyjnie tworzone są nowe systemy liczbowe czasami posiadające szczególne zalety matematyczne a czasami będące jedynie zabawną ciekawostką intelektualną. Szczególnie interesujące wydają się być system oparty nie o kolejne potęgi jednej podstawy, ale o kolejne wartości silnii (system silniowy), czy też niejednoznaczny system używający
1 5
co prawda dwu cyfr w zapisie - jednakże z podstawą stanowioną przez liczbę  
, czyli złotą liczbę opisującą za2
leżność w złotym podziale odcinka (złoty system liczbowy).
1.1.3 Szczególność systemu binarnego
Pozycyjny system dziesiątkowy zyskał swoją powszechność jako dość przypadkowy efekt takiego a nie innego przebiegu ewolucji człowieka. Można postawić pytanie jaki inny system pozycyjny mógłby aspirować do miana systemu bardziej niezależnego, bardziej obiektywnego? Czy mógłby to być system dwójkowy? Czym kierowali się autorzy różnego
rodzaju ziemskich przesłań do cywilizacji pozaziemskich posługując się właśnie systemem dwójkowym? Można odpowiedzieć, że jest to najprostszy system pozycyjny i jako taki najłatwiejszy do zrozumienia dla kogokolwiek – i trudno
5
z podobną opinią polemizować. Ale jak wyjaśnić znaczenie systemu binarnego w ludzkich zastosowaniach technologicznych? Informatyka jest argumentem umiarkowanym, bo co prawda od zarania budowy komputerów elektronicznych posługiwano się systemem binarnym – ale również trynarnym. Zarazem bajt jest znacznie powszechniej używaną jednostką informacji, co skłaniałoby do stosowania systemu oktalnego i nawet budowano komputery posługujące
się ośmioma możliwymi stanami najmniejszej jednostki informacji.
Odpowiedź na powyższe pytania jest znacznie szersza i określa istotę różnicy między analogowością a cyfrowością. Dla wyjaśnia posłużymy się naturalnym przykładem dźwięku, a ściślej jego wybranym pojedynczym parametrem na przykład głośnością, wraz z procesami rejestracji, odtwarzania i kopiowania.
Nośnikiem dźwięku jest powietrze, które drgając powoduje odkształcenia membrany mikrofonu. Odkształcenia
membrany mikrofonu powodują analogiczne przesunięcia sprzężonych z membraną elektromagnesów, które z kolei
powodują analogiczną zmianę pola magnetycznego rejestrowaną na nośniku magnetycznym co pewien stały przedział
czasu. Odtwarzanie przebiega odwrotnie, to znaczy zmiana namagnesowania nośnika powoduje analogiczną zmianę
pola magnetycznego w otoczeniu elektromagnesów głośnika, skutkującą analogiczną zmianą odkształcenia membrany
w konsekwencji powodującą wytworzenie analogicznie głośnego dźwięku. Z powyższego (nieco uproszczonego) opisu
wynika podstawowa wada analogowości. Nawet gdyby udało się wiernie zarejestrować wysokość fali głośności, to już
zapamiętanie na nośniku musi być obarczone pewną niewielką niedokładnością w stosunku do oryginału. Z kolei odczytanie wartości z nośnika nigdy nie jest do końca wierne zapisowi, a od odczytu do wydania dźwięku zachodzą kolejne zdarzenia mniej lub bardziej odkształcające wyjściową wartość. Urządzenia rejestrujące i odtwarzające mają na
ogół większą czułość niż sam nośnik magnetyczny i dlatego największa strata jakości odbywa się przy kolejnym kopiowaniu informacji między nośnikami. Pierwsza kopia może tracić jakość w stopniu niezauważalnym, być może kopia z kopii również - jednakże zawsze istnieje etap kopiowania z kopii po którym utrata jakości przestaje być akceptowalna.
Idea cyfrowości (bez wnikania w kwestię podstawy systemu) oznacza „uprogowienie” (dyskretyzację) możliwych
wartości. Głośność nie jest pamiętana w swojej rzeczywistej wartości (nawet nie próbuje się osiągnąć wierności), ale
poprzez wartość najbliższego progu i tenże próg jest zapisywany na nośniku. Zapis wartości progu ujawnia istotną zaletę cyfrowości. Urządzenie odtwarzające odczytuje wartość z nośnika (z całą pewnością lekko zaburzoną), ale nie odchyla membrany w proporcji do niej. Odczytana wartość jest wstępem dla uzyskania faktycznej wartości progu, ustalaną poprzez zaokrąglenie wartości odczytanej. Tym samym zarówno małe jak i duże (byle nie tak duże by trafić w sąsiedni próg) odkształcenia i tak skutkują wartością zapisaną w zamierzeniu. Jeszcze większe znaczenie ma cyfrowość
przy kopiowaniu. Gdyby stosować kopiowanie analogowe, idealne początkowe wartości progowe podlegałyby kolejnym rosnącym odkształceniom i cyfrowość nie na wiele by się zdała. Dlatego cyfrowe kopiowanie odczytuje wartości
progów (być może lekko zniekształcone), wyznacza wartość wyjściową (nie zaburzoną) i ponownie idealną wartość za-
6
pisuje. Stąd idea jest zawsze zapisana dokładnie, a biorąc pod uwagę odchylenia sygnału kopia może być nawet lepsza
od oryginału.
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Rysunek 1.1 Różnica zapisu analogowego i cyfrowego, istota binarności
Jednakże gdyby cyfrowość oznaczała jedynie powyższą ideę trudno byłoby uznać cyfrowość za postęp. Z natury
w cyfrowość wpisana jest niedokładność, z którą radzimy sobie poprzez odpowiednią ilość progów. Liczba możliwych
wartości (z uwzględnieniem różnej czułości w różnych zakresach) na tyle duża by przekroczyć czułość ludzkiego ucha
likwiduje problem. Jednakże duża ilość progów oznacza ich zagęszczenie i w konsekwencji operowanie na tyle szerokim pasmem by odległości między progami była istotnie większa niż wielkość zaburzeń, co oznacza większą jakość nośnika czyniącą przedsięwzięcie nieekonomicznym. Idealnie byłoby uzyskać zalety cyfrowości operując nośnikiem gorszej jakości niż przy zapisie analogowym. I tu właśnie wkracza binarność. Jeżeli wartość progu zapisana jest w systemie o podstawie binarnej, to każdą wartość możemy poskładać z dwu wartości nieomal logicznych jakimi są: „jest sygnał” oraz „brak sygnału” odpowiadające cyfrze 1 oraz 0 w zapisie – ale co ważniejsze odpowiadających maksymalnej
wartości sygnału oraz całkowitemu brakowi sygnału (jak na powyższym rysunku). Zwróćmy uwagę, że nawet słabej
jakości nośnik przy kompletnym braku sygnału bardzo trudno zaburzy się do wysokości bliskiej wartości maksymalnej, zaś sygnał maksymalny raczej nie zaniknie tak mocno być stać się nieomal brakiem sygnału.
Oczywiście zaprezentowana idea nie ogranicza się do nośników magnetycznych. Równie ważną rolę w fundamentalnym stosowaniu systemu binarnego pełni na przykład elektronika oparta o technologię krzemową gdzie wprost
nie ma możliwości innych stanów niż binarne. Można też na koniec zapytać dlaczego technologia binarna jest stosunkowo niedawna. Spośród wielu czynników zwróćmy powtórnie uwagę na sytuację z rysunku. Dla zapamiętania trzech
wartości użyliśmy dwunastu sygnałów, podczas gdy w zapisie analogowym (lub cyfrowym w systemie szestnastkowym) potrzebowalibyśmy dokładnie trzech sygnałów. Jak widać system binarny wymaga większej ilości pamięci
i szybszych urządzeń zarówno zapamiętujących jak i odtwarzających.
7
1.2 Konwersje między systemami
W całym podrozdziale stosowana będzie szczególna konwencja zapisu liczb uwzględniająca stosowaną podstawę systemu liczbowego. Każda liczba będzie pisana w nawiasie (z użyciem wyłącznie cyfr danego system) z dolnym indeksem
wyrażającym podstawę w systemie dziesiętnym. I tak „zwykła” liczba w systemie dziesiętnym, na przykład 123.456
będzie zapisana w postaci (123.456)10 , zapis (1011.0101)2 oznacza liczbę binarną, zapis (432.102)5 liczbę w systemie
piątkowym, zaś zapis (10354.672)8 oznacza liczbę w systemie ósemkowym. Dla ułatwienia obliczeń liczby bez nawiasów oznaczają liczbę w systemie dziesiętnym.
Ponadto konieczne jest określenie oznaczania cyfr w systemach wyższych niż 10. Powszechnie przyjętą konwencją jest używanie kolejnych dużych liter alfabetu. I tak gdy system liczbowy wymaga używania jedenastej cyfry będzie
ona oznacza przez A, konieczna dwunasta cyfra oznaczana będzie przez B i tak dalej. Tym samym zapis (ABCD.EF)16
oznacza liczbę w systemie heksadecymalnym (szesnastkowym) z liczbową interpretacją cyfr A=10, B=11, C=12, D=13,
E=14, F=15.
1.2.1 Konwersja do systemu dziesiętnego
Konwersja dowolnej liczby w systemie niedziesiętnym do systemu dziesiętnego przebiega wprost ze wzoru określającego pozycyjny system liczbowy. W ogólnym przypadku przy podstawie systemu wynoszącej b zapis postaci:
 di di 1  d1 d0 . d1 d2  d f 1 d f 
b
oznacza liczbę:
di  bi  di 1  bi 1    d1  b  d0  d1  b 1  d2  b 2    d f 1  b  f 1  d f  b  f 
 di  bi  di 1  bi 1    d1  b  d0 
Na przykład:
d
d
d1 d2
 2    ff11  ff
b
b
b
b
6 7
2
(10354.672)8  1  84  0  83  3  82  5  81  4  80  6  81  7  82  2  83  1  4096  0  512  3  64  5  8  4   

8 64 512
6  64  7  8  2
442
 4332 
 4332
 (4332.86328125)10
512
512
8
lub inny przykład:
(ABCD.EF)16  10 163  11162  12 161  13 160  14 161  15 162 
14 15
14 16  15
239
 2  40960 
 40960
 ( 40960.93359375)10
16 16
256
256
Do wyliczania części całkowitej przydatny jest schemat Hornera, który dla pierwszego z powyższych przykładów oznacza wyliczenia postaci:
(10354.)8   1  8  0   8  3  8  5  8  4    8  8  3  8  5   8  4 
 10  4096  11  256  12 16  13 


  67  8  5   8  4  541  8  4  4332
1.2.2 Konwersja części całkowitej do systemu niedziesiętnego
Algorytm konwersji części całkowitej liczby w systemie dziesiętnym do liczby w systemie niedziesiętnym można prosto
wyrazić słowami. Daną liczbę dzielimy przez podstawę systemu docelowego, przy czym dzielenie jest dzieleniem
z resztą. Wynik dzielenia podlega dalszym działaniom aż do uzyskania ilorazu zerowego, zaś kolejno otrzymywane
reszty stanowią cyfry zapisu w systemie docelowym. Pierwsza otrzymana reszta stanowi najmniej znacząca (prawą)
cyfrę w zapisie liczby w systemie docelowym, zatem ostatnia reszta stanowi cyfrę lewą.
Dla przykładu rozważmy postać liczby 780332 w systemie szóstkowym, co symbolicznie zapiszemy jako:
(780332)10  (?)6
Przebieg działań przedstawia poniższy schemat:
780332 : 6
130055 2 6 130055  2  780330  2  780332
21675 5 6  21675  5  130050  5  130055
3612 3 6  3612  3  21672  3  21675
602 0 6  602  0  3612  0  3612
100 2 6 100  2  600  2  602
16 4 6 16  4  96  4  100
2 4 6  2  4  12  4  16
0 2 60  2  0  2  2
z widocznym podobieństwem do znanego ze szkoły schematu wyznaczania rozkładu liczby na czynniki pierwsze.
9
Ostatecznie otrzymujemy:
(780332)10  (24420352)6
Dla sprawdzenia wyliczmy otrzymany zapis szóstkowy w konwersji do systemu dziesiętnego, co oznacza:
(24420352)6 

 2  6  4  6  4  6  2  6  0  6  3  6  5  6  2  16  6  4  6  2  6  0  6  3  6  5  6  2 
100  6  2  6  0  6  3  6  5  6  2   602  6  0  6  3  6  5  6  2  3612  6  3  6  5  6  2 
  21675  6  5   6  2  130055  6  2  (780332)10
Konwersja do systemu o podstawie większej niż 10 niczego nie zmienia w przebiegu algorytmu, choć należy pamiętać
że reszty większe od 10 będące niejednocyfrową liczbą stanowią pojedynczą cyfrę w systemie docelowym. Stąd na
przykład:
(1234567890)10  (?)20
oznacza:
1234567890 : 20
61728394
10 A 20  61728394  10  1234567880  10  1234567890
3086419
14 E 20  3086419  14  61728380  14  61728394
154320
19 J 20 154320  19  3086400  19  3086419
7716
0 0 20  7716  0  154320
385
16 G 20  385  16  7700  16  7716
19
5 5 20 19  5  380  5  385
czyli ostatecznie:
(1234567890)10  (5G0JEA)20
1.2.2.1 Konwersja między systemami niedziesiętnymi
Powyższe przykłady ilustrowały działanie algorytmu zamiany z systemu dziesiętnego na system o innej podstawie, natomiast opisana wcześniej zamiana z dowolnego systemu na system dziesiętny oznaczała rozpisanie zgodnie z sumą
iloczynów potęg. A jak konwertować liczby z których żadna nie jest w systemie dziesiętnym?
Ogólnie brak algorytmów automatycznej zamiany liczb w systemach różnych niż dziesiętne, a najczęstszą praktyką jest zamiana jednej z liczb na system dziesiętny, by następnie wynik zamienić na system o docelowej podstawie.
Okazuje się, że opisany wyżej algorytm zamiany na system niedziesiętny funkcjonuje nawet bez pośredniej zamiany
w system dziesiętny i wszystko jest kwestią wprawy w działaniach na liczbach w systemach różnych od dziesiętnego.
10
Jednakże nawet używając w zapisie wyłącznie cyfr systemu niedziesiętnego i tak wykonujemy jakieś obliczenia
„w umyśle” zatem tak naprawdę z jakiegoś systemu korzystamy i jest to system dziesiętny choć używany niejawnie.
Tym niemniej przy niewielkim dodatkowym wysiłku można konwersję między systemami niedziesiętnymi znacząco skrócić i uprościć. Należy jedynie pamiętać by podstawę systemu docelowego przedstawić w systemie wyjściowym, a później funkcjonuje standardowy algorytm w którym dla odejmowania pomocne jest wcześniejsze rozpisanie
kolejnych iloczynów podstawy docelowego systemu w systemie wyjściowym.
Dla przykładu rozważmy:
(321131)4  (?)7
By dzielić pisemnie i spisywać reszty musimy podzielić liczbę 321131 w systemie czwórkowym przez 7 . Jednakże pisemne dzielenie wymaga liczb w systemach o jednakowych podstawach i w tym wypadku musi to być system czwórkowy. W konsekwencji prowadzi to do konieczności zamiany liczby 7 na system czwórkowy, co oznacza posługiwanie
się liczbą 13 , jako że (7)10  (13)4 . Tak więc konwersja wymaga ilorazu 321131 : 13 , z tym że obie liczby są w systemie
czwórkowym. Można od razu dzielić pisemnie (cały czas mając świadomość używania systemu czwórkowego), ale
można się istotnie wspomóc rozpisując wielokrotności liczby 7 w systemie czwórkowym, co oznacza:
1  7  7  0  42  1  41  3  40  (13)4
2  7  14  0  42  3  41  2  40  (32)4
3  7  21  1  42  1  41  1  40  (111)4
4  7  28  1  42  3  41  0  40  (130)4
5  7  35  2  42  0  41  3  40  (203)4
6  7  42  2  42  2  41  2  40  (222)4
Kolejne pisemne dzielenia mają postaci:
1023
20031
321131 : 13
20031 : 13
32
13
113
103
111
32
21
111
13
111
2
0
2
0
22
1023 : 13
32
103
32
11
5
1
22 : 13
13
3
3
1 : 13
11
co w standardowym zapisie konwersji oznaczałoby:
321131
20031
1023
22
1
0
Ostatecznie:
: 13
2
0
5
3
1
(321131)4  (13502)7
Dla sprawdzenia wyliczmy oba zapisy w systemie dziesiątkowym otrzymując:
(321131)4    3  4  2   4  1  4  1  4  3  4  1 




  14  4  1  4  1  4  3  4  1 
(13502)7 
   57  4  1  4  3  4  1 
  229  4  3  4  1 
 919  4  1  (3677)10
  1 7  3  7  5  7  0   7  2 
  10  7  5   7  0   7  2 
  75  7  0   7  2 
 525  7  2  (3677)10
1.2.3 Konwersja części ułamkowej do systemu niedziesiętnego
Algorytm konwersji części ułamkowej liczby w systemie dziesiętnym do ułamka w systemie niedziesiętnym wydaje się
tylko nieznacznie bardziej skomplikowany od algorytmu konwersji części całkowitej. Ogólna idea polega na mnożeniu
danej liczby przez podstawę systemu docelowego, by następnie część całkowitą wyniku uznać za cyfrę w systemie docelowym, zaś cześć ułamkową jako wyodrębnioną całość (czyli z pominięciem części całkowitej) poddawać dalszemu
mnożeniu. Początkowe całkowite części iloczynów stanowią bardziej znaczące (czyli bliższe przecinkowi zmiennopozycyjnemu, a więc bardziej lewe) znaki zapisu w systemie docelowym – zatem kolejne wyliczane części całkowite stanowią cyfry coraz dalsze (bardziej prawe).
Dla przykładu rozważmy:
(0.55078125)10  (?)4
12
z przebiegiem algorytmu na poniższym schemacie:
0.55078125
4  0.55078125  2.203125
2 0.203125
0 0.8125
4  0.203125  0.8125
3 0.25
4  0.8125  3.25
4  0.25  1.0
1 0.0
co w konsekwencji oznacza:
(0.55078125)10  (0.2031)4
Dla sprawdzenia wyliczmy rozwinięcie wyniku:
2 0 3 1 2  43  0  4 2  3  4  1   2  4  0   4  3   4  1
(0.2031)4   2  3  4 


4 4 4 4
44
44
8  4  3  4  1  35  4  1  141  0.55078125

44
44
256
W przypadku konwersji do systemów o podstawie większej niż 10 części całkowite iloczynów mogą być liczbami większymi od 10 , co oznacza stosowanie cyfr oznaczanych literami. Dla przykładu rozważmy:
(0.1100921630859375)10  (?)16
Schemat działania ma postać:
0.1100921630859375
16  0.1100921630859375  1.761474609375
1
1 0.761474609375
C 12 0.18359375
16  0.761474609375  12.18359375
16  0.18359375  2.9375
2 2 0.9375
16  0.9375  15.0
F 15 0.0
z widocznymi dwoma przypadkami konieczności użycia cyfr większych od 10 . Ostateczny wynik to:
(0.1100921630859375)10  (0.1C2F)16
13
1.2.4 Ułamki okresowe
Użyte wcześniej przykłady konwersji części ułamkowej zarówno w przypadku konwersji do systemu dziesiętnego jak
i konwersji z systemu dziesiętnego były dobrane dość szczególnie, to znaczy ewentualne ilorazy lub iloczyny sprowadzały się do zera. W ogólności tak być nie musi i dla przykładu rozważmy:
(0.23)10  (?)6
Dokonując przemnażania części ułamkowej ze spisywaniem części całkowitych otrzymamy:
0.23
1 0.38 6  0.23  1.38
2 0.28 6  0.38  2.28
1 0.68 6  0.28  1.68
4 0.08 6  0.68  4.08
0 0.48 6  0.08  0.48
2 0.88 6  0.48  2.88
5 0.28 6  0.88  5.28
1 0.68 6  0.28  1.68
z widocznymi powtórzeniami wyróżnionymi kolorami. W podobnej sytuacji postępujemy jak przy szkolnym dzieleniu,
to znaczy powtórzenia stają się okresem zapisywanym w nawiasie, co w konkretnym przykładzie oznacza zapis:
(0.23)10  (0.12(14025))6
Sytuacja nieco się komplikuje przy zamianie liczby okresowej. Rozważmy na przykład:
(0.4652(7))10  (?)6
Przy odrobinie wprawy można się posługiwać standardowym algorytmem mnożącym 0.652777 przez 6 . Jednakże
coś co wydaje się jeszcze do zniesienia w przypadku jednocyfrowego okresu, przy dłuższym i zróżnicowanym okresie
raczej nie uda się załatwić tylko „w umyśle”. Dlatego praktyczniejsza jest nieco inna droga. Pierwszym etapem jest pozbycie się „nieskończoności”, czyli symbolicznych „trzech kropek”. Przydatny jest szkolny wzór na sumę wyrazów ciągu geometrycznego o ilorazie mniejszym od jedności. Wspomniana suma ciągu o ilorazie wynoszącym q i pierwszym
a
wyrazie ciągu oznaczonym przez a1 wyraża się wzorem 1 .
1 q
14
W naszym przykładzie otrzymamy:
6
5
2
7
7
6 102
5 101
2
1
 1

0.652(7)  0.65277  1  2  3  4  5    1 2  2 1  3  7   4  5    
10 10 10 10 10
10 10 10 10 10
 10 10

6 102  5 10  2 7 
1
1

 4  1  1  2   
3
10
10  10 10

Mając postać części „nieskończonej” w postaci sumy wyrazów ciągu geometrycznego możemy skorzystać ze wspomnianego wzoru, otrzymując:
600  50  2 7
1
652 7 1 652 7 10
 4
 3  4


 
0.652(7) 
3
10
10 1  1 10 10 9 103 104 9
10
10
652
7
652  9  7 5868  7 5875 1175 235 47
 3  3 





10 10  9
103  9
9000
9000 1800 360 72
47
możemy posłużyć się pisemnym ilorazem licznika i mianownika sprowadzonymi do systemu
Dla zamiany ułamka
72
szóstkowego, co oznaczałoby dzielenie: (115)6 : (200)6 z wszystkimi trudnościami. Ale możemy posłużyć się standardowym algorytmem zamiany ułamka dziesiętnego na system o innej podstawie, z tym że liczba wyjściowa dana jest
w postaci kreski ułamkowej a nie w postaci pozycyjnej. Praktycznie oznacza to poniższy schemat:
47
72
11
47 282 141 47
11
6



3
3
72 72
12
36 12
12
1
11 66 33 11
1
6 

 5
5
2
12 12 6
2
2
1
0
6  3  3
3
0
2
3
prowadzący do wyniku:
(0.4652(7))10  (0.353)6

15
Zniknięcie okresu w powyższym przykładzie nie jest rzecz jasna reguła, a jedynie mniej lub bardziej sterowanym przypadkiem. Konwersja liczby okresowej może prowadzić do zapisu również okresowego. Rozważmy:
(0.(5))7  (?)10
Rozpisując z ogólnej postaci systemu pozycyjnego otrzymamy:
5 5 7
5
1 1
(0.(5))7   0.5557   2  3     (1   2  )
7 7 7
7
7 7
co po skorzystaniu ze wzoru na sumę wyrazów ciągu geometrycznego oznacza:
5 1
5 1 5 7 5
(0.(5))7  
      0.8333  0.8(3)
7 1 1 7 6 7 6 6
7
7
Zatem ostatecznie:
(0.(5))7  (0.8(3))10
1.2.5 Przydatne twierdzenia
Zarówno w przypadku zwykłej konwersji ułamków o różnych podstawach jak i przy konwersji ułamka okresowego
znaczenia nabiera kwestia istnienia skończonego rozwinięcia liczby. W ogólności zagadnienie mieści się w dziedzinie
zaawansowanej arytmetyki (podobnie jak na przykład warunki podzielności liczb całkowitych), my zaś ograniczymy
się do przedstawienia wybranych twierdzeń pozwalających łatwo odrzucić możliwość wyznaczenia skończonego rozwinięcia lub nabrać pewności jego istnienia.
Oznaczenie
Przez U oznaczać będziemy ułamek posiadający w systemie o znanej podstawie p skończony m -cyfrowy zapis. Zarazem, z racji oczywistych zależności
U  pm A
U

pm
B
gdzie A oraz B są względnie pierwsze, przyjmujemy że U jest dane w postaci nieskracalnego ilorazu dwu znanych
liczb naturalnych.
Twierdzenie 1
Ułamek U (opisany jak wyżej) ma skończone rozwinięcie pozycyjne w systemie o podstawie q wtedy i tylko wtedy,
gdy wszystkie dzielniki pierwsze B są dzielnikami q .
16
Twierdzenie 2
Każdy nieokresowy ułamek w systemie o podstawie p jest nieokresowy w systemie o podstawie q wtedy i tylko wtedy
gdy wszystkie dzielniki pierwsze p są dzielnikami q .
Z powyższego twierdzenia wnioskujemy, że między innymi każda nieokresowa liczba binarna ma nieokresowy zapis
w systemie dziesiętnym (2 dzieli 10), ale już nie w systemie piątkowym czego przykładem może być (0.1)2  (0.222)5 .
Podobnie każda nieokresowa liczba w systemie trójkowym jest nieokresowa w systemach szóstkowym, dziesiątkowym
i wszystkich o podstawach będących wielokrotnością 3, ale już nieokresowa liczba szóstkowa jest okresowa w systemie
dziewiątkowym, na przykład (0.1)6  (0.144)9 z racji nie dzielenia 9 przez 2.
1.2.6 Zależności podstaw systemów
Pozycyjne systemy liczbowe wykazują bardzo przydatną cechę pozwalającą zautomatyzować konwersje nawet bez rozróżniania części całkowitej od ułamkowej. Wspomniana cecha wynika z potęgowej zależności podstaw i rozpatrzmy ją
na podstawie konwersji między systemem binarnym i czwórkowym, oraz dwójkowym i ósemkowym. Nietrudno zauważyć, że każda cyfra w systemie czwórkowym stanowi dwie cyfry w systemie dwójkowym, zaś każda cyfra w systemie ósemkowym stanowi trzy cyfry w systemie binarnym jak na poniższych tabelach:
(7)8  (111)2
3  (11)2
4
(2)4  (10)2
(1)4  (01)2
(0)4  (00)2
(6)8  (110)2
(5)8  (101)2
(4)8  (100)2
(3)8  (011)2
(2)8  (010)2
(1)8  (001)2
(0)8  (000)2
17
Powyższą obserwację możemy uogólnić do twierdzenia mówiącego:
Jeżeli dane są dwa zapisy jednej liczby w systemach o podstawach odpowiednio b1 oraz b2 , a ponadto istnieje liczba
całkowita p dla której zachodzi równość:
 b1 
p
 b2
to każde p-cyfr pierwszego zapisu jest równoważne pojedynczej cyfrze drugiego zapisu.
W praktyce oznacza to, że zamieniając zapis liczby z systemu o mniejszej podstawie na zapis liczby o większej podstawie (z zachowaniem potęgowej zależności) grupujemy odpowiednią liczbę cyfr i zamieniamy każdą grupę na właściwą
cyfrę. Podobnie zamieniając zapis w systemie o większej podstawie na zapis w systemie o mniejszej podstawie (cały
czas pamiętając o zależności potęg) wystarczy każdą cyfrę zapisu w systemie o większej podstawie zamienić na odpowiednią liczbę cyfr w systemie o mniejszej podstawie.
Dla przykładu rozważmy poniższe konwersje:
7
7
7
.
ósemkowy
1
1
2
õúúúúúùúúúúúû õúúúúúùúúúúúû õúúúúúùúúúúúû
õúúúúúùúúúúúû õúúúúúùúúúúúû õúúúúúùúúúúúû
0 1 1 1 1 1 1 0 0 1 . 0 0 1 0 1 0 1 1 1 0
binarny
´¨¨≠¨¨Æ ´¨¨≠¨¨Æ ´¨¨≠¨¨Æ ´¨¨≠¨¨Æ ´¨¨≠¨¨Æ
´¨¨≠¨¨Æ ´¨¨≠¨¨Æ ´¨¨≠¨¨Æ ´¨¨≠¨¨Æ ´¨¨≠¨¨Æ
0 1
3
3
3
czwórkowy
2
1 . 0
2
2
2 0
´¨¨¨¨¨≠¨¨¨¨¨Æ ´¨¨¨¨¨≠¨¨¨¨¨Æ
´¨¨¨¨¨≠¨¨¨¨¨Æ
´¨¨¨¨¨≠¨¨¨¨¨Æ
´¨¨¨¨¨≠¨¨¨¨¨Æ
´¨¨¨¨¨≠¨¨¨¨¨Æ
15
8
9
.
1
2
11
heksadecymalny
9
8
.
1
F
2
B
i zwróćmy uwagę na kilka szczegółów. Po pierwsze grupowania w dłuższe sekwencje muszą odbywać się nie od lewej
czy też od prawej strony całej liczby, ale osobno w lewo i osobno w prawo od znaku oddzielającego część całkowitą od
ułamkowej. Po drugie trudno oczekiwać by zapisy miały zawsze odpowiednio dużą liczbę cyfr pozwalającą na grupowanie niezerowych cyfr. Stąd cześć całkowita może wymagać dołożenia zer z lewej strony, zaś część ułamkowa z prawej - jak można zauważyć przy konwersji z systemu binarnego do czwórkowego lub z czwórkowego do heksadecymalnego.
W przypadku ułamków z okresowością zamiana z systemu o większej podstawie na system o mniejszej podstawie nie
stanowi problemu – po prostu okres ma dłuższy zapis. Jednakże zamiana z systemu o mniejszej podstawie na system
o większej podstawie nieco się komplikuje. Rozważmy poniższy przykład:
(0.11(10110))2  (?)4  (?)8  (?)16
18
z którego na początek rozważmy konwersję do systemu czwórkowego. Oczywistym jest odłożenie pewnej liczby okresów, po którym możemy przeprowadzić zwykłe grupowanie odpowiedniej liczby cyfr.
0.11 (10110) (10110) (10110) 
3 ( 2 3 1 1 2) (2 3
Na powyższym przykładzie możemy zaobserwować, że odłożenie dwu okresów prowadzi do powtórzenia sekwencji
grupowania dając w efekcie:
(0.11(10110))2  (0.3(23112))4
Jednakże z powyższego przykładu nie należy wnioskować, że dla zapewnienia poprawności należy odłożyć ilość okresów taką samą jak przy grupowaniu cyfr – ponieważ znaczenie mają cyfry przed okresem. Dla przykładu konwersja na
system ósemkowy:
0.11 (10110) (10110) (10110) (10110) 
2
5
5) 3
7 (3
6
wymaga odłożenia czterech okresów, bo dopiero czwarty okres daje jednakowość grupowania prowadząc do wyniku:
(0.11(10110))2  (0.7(32655))8
Nie należy zarazem ulegać złudzeniu, że pokrywanie się ostatnich cyfr okresu z końcem grupy wyznacza poprawność
całej konwersji. Na powyższym przykładzie trzy ostatnie cyfry drugiego odłożenia okresu zamykają pojedynczą cyfrę
zapisu ósemkowego, nie stanowiąc jednak poprawnego końca zakresu.
Podobne zjawisko zachodzi przy konwersji z systemu dwójkowego do heksadecymalnego z wykorzystaniem powyższej przykładowej liczby. Możemy użyć wprost systemu dwójkowego, ale równie dobrze możemy wykorzystać wyznaczony zapis czwórkowy.
0.3 (23112) (23112) (23112)
E (D 6
Ostatecznie otrzymamy:
B5
A) D
(0.11(10110))2  (0.3( 23112))4  (0.E(D6B5A))16
19
Indeks
A
P
addytywny system liczbowy, 4
podstawa systemu, 5
pozycyjny system liczbowy, 4
C
cyfra, 4
S
system liczbowy, 4
addytywny, 4
pozycyjny, 4
20