niedziela, 12 czerwca 2022

Systemy liczenia z wewnętrznym podziałem

Zamierzam napisać parę artykułów o paru szczególnych systemach liczenia, jednak najpierw chciałbym podzielić się pewną obserwacją, którą dokonałem poznając sposób zapisu cyfr takich systemów.

Nie wiem, czy nazwa zamieszczona w tytule jest trafna - chodzi o to, że w niektórych systemach liczenia zapisuje się cyfry dzieląc podstawę na dwie części, które z kolei same tworzą nowe podstawy do zliczania pod-cyfr.

Jestem prawie pewien, że ten opis niewiele mówi, dlatego przejdę do konkretnych przykładów z obrazkami.

System sześćdziesiątkowy

Używany w starożytnej Babilonii oraz częściowo w innych częściach świata, obecnie zachował się w zasadzie tylko w zliczaniu sekund i minut. Konstrukcja cyfr w tym systemie wyglądała w taki sposób, że zliczało się się po prostu jedności, a gdy dochodziło się do 10 zapisywano to osobnym symbolem, po czym dalej zliczało się jedności (aż do 20 itd). Przykładowa cyfra o wartości dziesiętnej 37 wygląda następująco:

Co jest po prostu zapisem symbolu 30 i 7. Dlatego przy omawianiu systemu liczenia babilończyków stosuje się czasem taki „dziesiętny” zapis: 37.

Przykład dłuższej liczby:

3, 25, 40 w tym systemie to 3 * 602 + 25 * 60 + 40 = 12340 w systemie dziesiętnym.

Dla pewnego odróżnienia od ewentualnych innych systemów o podobnej strukturze można takie liczby zapisywać z resztą jak czas:

3:25:40

Podobnie można skonstruować dla celów obrazowych system setkowy. Różnica będzie jedynie taka, że w systemie sexagesimalnym mamy tylko 60 cyfr od 0 do 59, w systemie setkowym wykorzystujemy natomiast pełen zakres cyfr dziesiętnych, od 00 do 99. Inna oczywista różnica to różne podstawy (tam 60 a tu 100). Zapis będzie podobny ale istotny będzie tutaj fakt, że konwersja do systemu dziesiętnego będzie zwykłym przepisaniem cyfr:

01,23,45 w systemie setkowym to po prostu 12345 w systemie dziesiętnym.

System dwudziestkowy

System ten używany był m.in. przez Majów oraz ludność Iñupiat zamieszkującą Alaskę, aczkolwiek pewne jego szczątkowe ślady można znaleźć w językach indoeuropejskich (jak choćby w polskich „nastkach”, aczkowiek tu podział przebiega inaczej niż to opisano niżej).

W obydwu przypadkach, podobnie jak w systemie sześćdziesiątkowym, podstawa 20 podzielona jest na 4 grupy po 5 jedności. Przy czym odmiennie od Babilończyków, obydwa te ludy zapisywały grupy 5-tek pionowo obok grup jedności, na dole w przypadku Majów i u góry w przypadku Iñupiatów. Przykładowy zapis liczby 17 cyframi Majów wygląda tak:

Kropki oznaczają jedności, kreski zaś oznaczają grupy piątek. Można więc, podobnie jak w systemie babilońskim, zapisać taki symbol cyframi dziesiętnymi jako 32 z taką jednak ważną różnicą, że będzie to liczba w systemie piątkowym! Czyli poprawny matematycznie zapis to 325 = 3 * 5 + 2 = 17.

System dziesiątkowy

W zasadzie to jedyne dwa przykłady które znam, gdzie taki podział jest naturalny. Ktoś mógłby tu słusznie zauważyć, że metoda ta jest całkiem dobrym pomysłem, biorąc pod uwagę że dla systemów o tak dużych podstawach wymyślenie, zapamiętanie i używanie odrębnych symboli dla każdej cyfry byłoby mocno kłopotliwe. I tu się zgadzam, chociaż w przypadku systemu 20-kowego to chyba nie byłby aż taki duży problem.

Ale zauważyłem pewną bardzo ciekawą rzecz. Otóż w systemie dziesiętnym również można zauważyć taki podział.

W cyfrach arabskich tego nie widać, ale w liczbach rzymskich już tak!

Liczby od 1 do 3 (a czasem też 4) zaznaczamy jednościami 'I', piątka natomiast ma już nowy symbol 'V' i kolejne liczby są zapisywane jako 5+liczba od 1 do 3. To nie jest może aż takie wyraźne, ponieważ raz: z powodu wyjątków liczby 4 i liczby 9, a dwa: ponieważ są to liczby a nie cyfry i liczby od 10 wzwyż mają znowu nowe symbole (i podobnie od 100 i od 1000 wzwyż). Aczkolwiek schemat się powtarza (np. 20 to XX a 50 ma już symbol L itd).

  Symulacja regularnych liczb rzymskich:
  
      I,  II,  III,  IIII
  V, VI, VII, VIII, VIIII
      X,  XX,  XXX,  XXXX
  L, LX, LXX, LXXX, LXXXX
      C,  CC,  CCC,  CCCC
  D, DC, DCC, DCCC, DCCCC

Skojarzyłem też od razu, że często zliczając coś w systemie dziesiętnym, grupuję dane rzeczy w piątki. Jest to dosyć naturalne, gdyż 2 i 5 to jedyne nietrywialne dzielniki 10-ki.

Innego rodzaju podział w systemie dziesiątkowym można zauważyć niejako w drugą stronę. Jeśli spojrzymy na zapis jakiejś liczby z dużą ilością cyfr to zauważymy, że często są one pogrupowane trójkami. Odwołując się do analogii z systemem setkowym (patrz wyżej) można by powiedzieć, że używamy w zasadzie pewnego rodzaju systemu tysiącowego:

1 milion to 1'000'000, czyli 1 * 10002 + 0 * 1000 + 0
wiek układu słonecznego to 4'567'000'000 czyli 4*10003 + 567*10002 + 0*1000 + 0

I tak, jak kolejne pozycje w systemie dziesiętnym nazywamy jeden, dziesięć, sto... tak w systemie tysięcznym byłyby to: jeden, tysiąc, milion, miliard...

Systemy dwójkowe

Zasadniczo każdy system, którego podstawa jest potęgą dwójki można sprowadzić do systemu binarnego. Zapisywanie cyfr w takim systemie jest czymś w rodzaju kompresji binarnego zapisu. W systemie szesnastkowym każda z czterech cyfr binarnych jest zapisywana jako jedna cyfra, przy czym gdy zaczyna brakować cyfr dziesiętnych, używa się początkowych liter alfabetu (0...9, A, B ... F).

W informatyce najmniejszą jednostką pamięci jest bajt, który posiada 8 bitów. Można taki system operowania na danych binarnych potraktować jako system liczenia o podstawie 256. Nie można jednak reprezentować takich „liczb” pojedynczymi cyframi - szybko zabrakłoby nam symboli. Stosuje się więc taki podwójny zapis, podobnie jak w systemie „setkowym”: pierwsza cyfra to ilość 16-tek, a druga ilość jedności. Na przykładzie:


11012 = D16 = 13
01112 = 716 = 7

1101 01112 = D716 = 13 * 16 + 7 = 215

I to w zasadzie tylko ta jedna ciekawostka, którą chciałem się podzielić, przedstawiona na kilku konkretnych przykładach. Inspiracją do napisania tego artykułu było kilka filmików zamieszczonych w internecie, ale postanowiłem że nie będę ich tu wymieniał: wszystkie źródła inspiracji wymienię pod odpowiednimi artykułami dla poszczególnych systemów.

* * *

Obrazki zostały wykonane przeze mnie w GIMPie. Do ich wykonania wykorzystałem grafiki pobrane z Wikipedii:

Dla liczb babilońskich autorem jest Régis Lachaume, grafiki są w domenie publicznej.

Linki do grafik:

https://en.wikipedia.org/wiki/File:Babylonian_1.svg - wykorzystana do stworzenia własnych cyfr od 0 do 9 (te cyfry autora nie podobały mi się).

https://en.wikipedia.org/wiki/File:Babylonian_10.svg i td. aż do 50 - wykorzystane bezpośrednio.

Dla liczb Majów autorami są:

Original: Neuromancer2K4 Vector: Bryan Derksen

Grafika rozpowszechniana jest na licencji Creative Commons Attribution-Share Alike 3.0 Unported

Link do grafiki: https://en.wikipedia.org/wiki/File:Maya.svg

środa, 1 czerwca 2022

Mnożenie pisemne

Uwaga! To nie jest tutorial, jak mnożyć pisemnie. Zakładam, że czytelnik wie mniej więcej, jak to się robi, albo chociaż miał z tym styczność. W przeciwnym wypadku odsyłam do internetu .

W szkole podstawowej uczono nas pewnej metody mnożenia pisemnego. W skrócie wygląda ona tak:

Przy okazji oglądania filmiku o kostkach Napiera (Napier's bones) dowiedziałem się o innej ciekawej metodzie pisemnego mnożenia, bardzo intuicyjnej i nie wiem, czy bodajże nie łatwiejszej.

Metoda ta po angielsku nazywa się Lattice multiplication, co na polsku można przełożyć jako mnożenie w siatce (ale nie w kratce, ponieważ to kojarzy się z zeszytem w kratkę który jest wykorzystywany w nauce matematyki). Wygląda ona mniej więcej tak:

Obydwie liczby wpisujemy po bokach prostokątu. Jedną z cyfr u góry, zgodnie z kierunkiem pisania a drugą po prawej stronie z góry w dół. Każdą kratkę dzielimy przekątną jak na obrazku i wpisujemy wynik mnożenia cyfr z kolumny i wiersza przecinającego się w danej kratce. Przy czym rozdzielamy dziesiątki i jedności po obu stronach przekątnej (jak na obrazku). Następnie sumujemy wzdłuż przekątnych (czerwone zakreślenie) - uwzględniając przeniesienia! Wynikiem będzie liczba odczytana wzdłuż zielonej strzałki.

Na pierwszy rzut oka może się wydawać, że jest to bardzo egzotyczna metoda, nie mająca nic wspólnego ze standardowym sposobem mnożenia - zupełnie inny algorytm.

Weźmy jednak ten standardowy sposób i zamiast od razu sumować wyniki mnożenia wszystkich cyfr mnożnej przez daną cyfrę mnożnika wpiszmy po prostu osobno wyniki mnożenia poszczególnych cyfr mnożnej i mnożnika (pamiętając o tym, żeby umieścić je w odpowiednich pozycjach):

Jeśli przyjrzymy się teraz uważnie, to zauważymy, że znajdują się tu te same liczby, które znajdziemy w metodzie w siatce. Nawet przeniesienia są identyczne. Dodajemy wszystkie cyfry na danej pozycji tak samo, jak w metodzie w siatce, różna jest tylko kolejność.

Wygląda więc na to, że tam metoda to po prostu trochę inaczej zapisana metoda standardowa mnożenia pisemnego .

Wszystkie obrazki zostały wykonane przeze mnie, za pomocą programu OpenOffice i obrobione przy pomocy Gimpa.