#jedenasta37
Trochę zabierałem się do tego artykułu jak do jeża, czuje się głupi, gdy widzę skomplikowane wzory matematyczne, które zostawiają w głowie tylko jedno wielkie WTF. Ale cóż popełniło się artykuł o błędzie zaokrąglania, to teraz trzeba wytłumaczyć dlaczego ten błąd się pojawił 🙂
Zapraszam na nowy cykl artykułów z serii „Podstawy informatyki i kawa”.
Wpis z dedykacją dla Madzi J
Systemy liczbowe tak naprawdę już znasz
Uczymy się liczyć od małego – najpierw dziesięciu cyferek, potem dodawania i odejmowania, mnożenia, dzielenia i różniczkowania nawet. Te 10 cyfr jest dla nas tak oczywiste, że nawet nie zauważamy, że to tylko jakaś forma zapisu – system dziesiętny. A przecież na co dzień spotykamy się choćby z systemem dwunastkowym, którego używali Rzymianie: mamy dwanaście miesięcy, dwanaście godzin przedpołudniowych i popołudniowych.
Są wśród nas tacy, którzy kupują jajka na tuziny! Może też ktoś tak sprzedaje jaja? A jeśli rodzina ma więsze potrzeby, albo Wielkanoc idzie, to można kupić gros, czyli tuzin tuzinów, co znaczy 12*12 = 144 lub kope czyli połowę grosa, a jeśli ktoś planuje naprawdę tęgą wyżerkę to może liczyć w grosach królewskich (12 grosów czyli 123 ,czyli 1728).
Historycznie przez lata różne waluty były liczone w systemie dwunastkowym (do 1970 w Wielkiej Brytanii jeden szyling wynosił 12 pensów).
Czas na matematykę!
System dziesiętny, którego używamy jest systemem pozycyjnym, co znaczy, że pozycja cyfry w zapisie ma znaczenie: ta sama 5 (piątka), ten sam znaczek, może oznaczać 5, 50 albo 500..
Każda pozycja ma przypisaną pewną wagę. Czyli to, co napisałem powyżej: dana cyfra oznacza mniej lub więcej sztuk czegoś, w zależności od tego, na jakim miejscu została zapisana. Tą wagę obliczamy w ten sposób, że mnożymy cyfrę przez podstawę systemu, w którym zapisana jest liczba, podniesioną do potęgi oznaczającej pozycję danej cyfry. Czyli u nas podstawą systemu będzie to 10, bo system ma 10 znaków do zapisu: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9). Pozycję cyfry numerujemy od prawej strony od 0. Czyli dla rzędu jedności waga wynosi 100 , czyli 1, co by się zgadzało, bo w liczbie 123, 3 oznacza 3 sztuki.
Dla rzędu dziesiątek, waga wynosi 101, co też się zgadza, bo w 123 liczba 2 oznacza dwie dziesiątki, czyli 20, czyli 2 * 10.
- liczba 11 oznacza tak naprawdę 10 + 1
- liczba 111 oznacza tak naprawdę 100 + 10 + 1
używając zapisu potęgowego wygląda to tak:
- 11 <=> 1 * 101 + 1 * 100
- 111 <=> 1 * 102 + 1 * 101 + 1 * 100
jeżeli chcemy zapisać że coś jest liczba ujemną dodajemy znak „-”
- -11 <=> – 1 * 101 – 1 * 100
- -111 <=> – 1 * 102 – 1 * 101 – 1 * 100
A co z groszami?
Przejdźmy o kroczek dalej: jak zapisujemy liczby niecałkowite, to dodajemy przecinek na te wszystkie ułamkowe wartości. Każda cyfra, znajdująca się na pozycji po przecinku, będzie mnożona do ujemnej potęgi analogicznie do tych przykładów:
- Liczba 0,1 znaczy tyle, co 0 * 100 + 1 * 10-1 , czyli 0 * 0 + 1 * 1/10
- Liczba 0,32 znaczy tyle, co 0 * 100 + 3 * 10-1 + 2 * 10-2 , czyli 0 * 0 + 1 * 3/10 + 1 * 2/10
Dlatego mówimy np czternaście (w domyśle: części) setnych, 2 (części) dziesiąte 🙂
Konsekwentnie idąc dalej
- liczba 111,1 oznacza tak naprawdę 100 + 10 + 1 + 0,1
- 11,1 <=> 1 * 102 + 1 * 101 + 1 * 100 + 1 * 10-1
Mam nadzieje że pisze zrozumiale 🙂
Jak nie rozumiemy, pijemy łyk kawy i czytamy jeszcze raz. Jak dalej nic, wbijamy do grupy matki programistki i wyrzucamy pytania z wątpliwościami.
A co to ma wspólnego z kompami?
Skoro wiemy w jakim systemie liczymy, to ucieszymy się zapewne z tego, że komputery liczą tak samo, tzn. dodają, odejmują i mnożą. Jedyna różnica polega na tym, że używają do tych zadań systemu dwójkowego (in. binarnego). To wszystko dlatego, że biedactwa nie mają 10 cyfr, mogą tylko stwierdzić, czy mają prąd w transformatorku, czy go też go tam nie mają, co odpowiada za obsługę dwóch stanów / znaków: 0 i 1.
Uwaga, będzie suchar!
Jest 10 rodzajów ludzi: ci którzy rozumieją system dwójkowy i ci którzy nie rozumieją.
10 w zapisie binarnym to inaczej 1* 21 + 0 * 20
Yyy, a jak rozróżnić w jakim systemie zapisano liczbę?
Żeby się nie pogubić w różnych systemach, używa się notacji, w której w indexie dolnym zapisujemy bazę systemu: na przykładzie liczby 101
- 10110 oznacza system dziesiętny, czasami można się spotkać z zapisem 101dec
- 1012 oznacza system dwójkowy zwany binarnym , czasami można się spotkać z zapisem 101bin
- 1018 oznacza system ósemkowy zwany oktalnym, czasami można się spotkać z zapisem 101oct
- 10116 oznacza system szesnastkowy zwany heksadecymalnym, czasami można się spotkać z zapisem 101hex
System dwójkowy ma podstawę dwa czyli :
Zapis dwójkowy | Zapis potęgowy | Zapis sumaryczny | Zapis dziesiętny |
112 | 1* 21 + 1* 20 | 2 + 1 | 310 |
1112 | 1* 22 + 1* 21 + 1* 20 | 4 + 2 + 1 | 710 |
111,12 | 1* 22 + 1* 21 + 1* 20 + 1* 2-1 | 4 + 2 + 1 + | 7,510 |
Dalej jest jeszcze ciekawiej 🙂
W następnym tygodniu zapraszam na wpis o tym jak przeliczać różne systemy między sobą.
Post Scriptum
Tak można teraz już wypić kawę 😛
Prosze poczytać o utracie cyfr znaczących a nie pisać głupot. Pozdrawiam.
Poczytałem,
Problem utraty cyfr znaczących wysypuje w reprezentacji liczby rzeczywistej przy odejmowaniu, zresztą nie tylko w komputerach.
Problem z ucinaniem kocówek liczb typu 0.1 przez komputer, spowodowany jest przede wszystkim tym, że liczbą 0.1 w zapisie dwójkowym jest ułamkiem okresowym, a w zapisie dziesiętnym ułamkiem zwykłym.
Pozdrawiam