• Nie Znaleziono Wyników

Kodowanie liczb

N/A
N/A
Protected

Academic year: 2021

Share "Kodowanie liczb"

Copied!
6
0
0

Pełen tekst

(1)

Kodowanie liczb

Poznaliśmy kodowanie znaków w komputerach. Teraz zajmiemy się kodowaniem liczb.

Omówimy kodowanie liczb całkowitych (0,1,-1,2,-2,3,-3,…) i rzeczywistych (czyli wszystkich liczb). Kodowanie liczb w komputerze musi być takie by można było łatwo dokonywać na nich operacji arytmetycznych (dodawanie, odejmowanie, mnożenie i dzielenie). Zasadniczo chodzi tylko o dodawanie, bo pozostałe działania sprowadzają się do dodawania (odejmowanie to dodawanie liczb różnych znaków np . 5-7 =5+(-7); mnożenie to wielokrotne dodawanie np.

3*4 = 3+3+3+3; dzielenie to również wielokrotne dodawanie liczby przez którą dzielimy by otrzymać liczbę którą dzielimy np. 12:3 to taka liczba że dodanie 3 w tej liczbie daje liczbę 12, 3+3+3+3=12 a więc 4). W przypadku liczb rzeczywistych kodowanie zawsze będzie z określoną dokładnością ze względu na zawsze ograniczoną liczbę bitów przeznaczoną na ich reprezentację (zwykle 16 bitów, ale również 32 bity).

Liczby całkowite (0,1,-1,2,-2,3,-3,…).

Załóżmy, że liczby te możemy reprezentować ustaloną liczbą bitów np. n > 0 (zwykle 16 lub 32 ale my dla ilustracji będziemy używać mniejszej liczby). Oczywiście liczby te będziemy reprezentować w zapisie binarnym – system pozycyjny o podstawie 2.

I sposób (najprostszy ale nie jest używany). Reprezentacja znak-moduł.

Pierwszy bit reprezentuje znak liczby a pozostałe jej wartość bezwzględną (moduł). Znak liczby całkowitej x to 0 gdy liczba jest nieujemna (> lub równa 0) i 1 gdy jest ujemna.

Na przykład

Największa liczba którą możemy przedstawić to

czyli 2

n-1

+2

n-2

+ …+ 2+1 = 2

n

-1. Na przykład dla n=8 największą liczbą którą możemy

zakodować to 2

8

-1 =255. Podobnie najmniejszą będzie -2

n

+1, czyli w przypadku n=8 to liczba -255.

Ten sposób reprezentacji jest niepraktyczny gdyż są kłopoty z odejmowaniem (dodawaniem liczb różnych znaków).

II sposób. Reprezentacja uzupełnieniem do dwójki.

Ta metoda jest stosowana w komputerach by ominąć trudności z odejmowaniem.

(2)

W odejmowaniu kłopotliwe jest „pożyczanie” jedynek. Sposób reprezentacji uzupełnieniem do dwójki upraszcza ten problem. Pierwszy bit reprezentuje znak liczby (tak jak w I sposobie) Znak liczby całkowitej x to 0 gdy liczba jest nieujemna (> lub równa 0) i 1 gdy jest ujemna.

Pozostałe bity zależą od znaku liczby. Jeśli x jest liczbą całkowitą dodatnią to reprezentujemy tak jak w I sposobie tzn. pozostałe bity reprezentują jej wartość bezwzględną (moduł).

Jeśli x jest liczbą ujemną to pozostałe bity reprezentują liczbę y=2

n-1

+x = 2

n-1

- |x|<2

n-1

Przykład. Niech n=8 (ośmio bitowa reprezentacja). Rozważmy dwie liczby x=15 i x=-15.

1. x=15 = (1111)

2

ma reprezentację 00001111.

2. x=-15 = -(1111)

2

ma reprezentację 11110001, bo y = 2

7

- |x|=(10000000)

2

–(1111)

2

= (1110001).

Liczbę y=2

n-1

+x = 2

n-1

- |x| reprezentującą x gdy x jest ujemna obliczamy algorytmicznie:

zauważmy, że y + |x| = 2

n-1

= (10000000)

2

, a więc y jest to taka liczba która po dodaniu do x daje wyłącznie zera, czyli uzupełniamy cyfry x by otrzymać 2. Na przykład dla x = -15 = - (1111)

2

mamy y+1111=10000000, czyli 1110001. Dla x=-24 = -(11000)

2

mamy y = 0001000.

Ogólna zasada (algorytm):

Przy tym sposobie kodowania dodawanie i odejmowanie (czyli dodawanie liczb tych samych i różnych znaków) sprowadza się tylko do dodawania (w obrębie zakresu).

Przykład. Przy reprezentacji 8-io bitowej wykonać odejmowanie 101000 – 1111.

(3)

00011001 jest reprezentacją liczby +11001. Gdy odwrócimy sytuację tzn. obliczymy 1111 – 101000, to otrzymamy

Liczba 11100111 reprezentuje liczbę -11001, co daje prawidłowy wynik.

Uwaga. Powyższa reprezentacja jest dobra tylko dla liczb z zakresu reprezentowanego n bitami. Gdy dodamy dwie liczby dodatnie lub ujemne których suma przekroczy zakres otrzymamy fałszywe wyniki.

Liczby rzeczywiste R. Reprezentacja zmiennoprzecinkowa.

W istocie w komputerach możemy kodować liczby rzeczywiste tylko z określoną dokładnością, a więc tylko liczby wymierne. Najważniejszą jest reprezentacja zmiennoprzecinkowa.

Wykorzystuje ona zapis potęgowy liczb rzeczywistych.

Przykład. Liczbę dziesiętną 2056,0045 możemy zapisać na różne sposoby za pomocą potęgi

2056,0045 = 20,560045·10

2

= 0,20560045·10

4

= 20560045·10

-4

. Podobnie liczba dziesiętna -0,000345 = -345·10

-6

= -0,345·10

-3

.

Ogólnie każdą liczbę rzeczywistą x (oczywiście z pewnym przybliżeniem) możemy zawsze zapisać w postaci

x = m·q

c

m – nazywamy mantysą, c – cechą (wykładnikiem) a q jest podstawą systemu pozycyjnego.

Przedstawienie to nie jest jednoznaczne. W powyższym przykładzie dla x = 20,560045·10

2

mamy: m=20,560045, c = 2 i q = 10 lub

x = 0,20560045·10

4

mamy: m=0,20560045, c = 4 i q = 10.

Zatem wystarczy zakodować tylko mantysę, cechę i podstawę by odtworzyć liczbę.

Na ogół podstawa jest ustalona (powyżej podstawą jest 10, ale w komputerach 2), więc

wystarczy zakodować mantysę i cechę. Zatem przy znanej podstawie liczbę x

reprezentujemy następująco:

(4)

Dla ustalenia uwagi przykłady podamy w systemie dziesiętnym, choć w rzeczywistości

kodujemy liczby w systemie dwójkowym (jedna komórka w powyższym rysunku to jeden bit;

0 lub 1). Oczywiście wielkość liczby, którą możemy zakodować zależy od ustalonej liczby bitów przeznaczonych w komputerach na liczby (zmiennoprzecinkowe). W komputerach zwykle te liczby wynoszą:

1. 32 bity ((Single Precision Floating Point) 8 na cechę i 24 na mantysę (liczby od 10

38

do 10

-37

dokładność do siódmego miejsca po przecinku w zapisie dziesiętnym)

2. 64 bity ((Double Precision Floating Point) 11 na cechę i 53 na mantysę (dokładność do 15-tego miejsca po przecinku).

W przykładach przyjmiemy inne (mniejsze) liczby przeznaczone na mantysę i cechę. Na przykład dla 6 bitów na mantysę i 4 na cechę dla liczby w systemie dziesiętnym x = 2065,0045 = 20,560045·10

2

= 0,20560045·10

4

= 20560045·10

-4

mamy różne reprezentacje tej samej liczby

Aby pozbyć się niejednoznaczności w zapisie zmiennoprzecinkowym liczby oraz by pozbyć się przecinków zwykle normalizujemy zapis tak aby mantysa była liczbą tylko po przecinku (część całkowita jest zerem a część ułamkowa zaczyna się od cyfry niezerowej). Na przykład

2056,0045 w znormalizowanej postaci (normalizacja do ułamka) to 0,20560045·10

4

, liczba - 0,0006709 to - 0,6709·10

-3

. Ich jednoznacznymi zmiennoprzecinkowymi

reprezentacjami są: 020560000004 i 167090010003

Działania na liczbach zmiennoprzecinkowych są bardziej skomplikowane niż w przypadku liczb całkowitych. Dla dwóch liczb x = m·2

c

i y = n·2

d

w zapisie binarnym

Dodawanie. Najpierw musimy sprowadzić te liczby do zapisu o wspólnej cesze e zmieniając mantysy i wtedy dodajemy mantysy x = m

1

·2

e

i y = n

1

·2

e

to wynik jest x + y = (m

1

+ n

1

)2

e

np. dla x = 0,10110·2

5

= 10,110·2

3

i y = 0,101101·2

-2

= 0,00000101101·2

3

x + y = 10,11000101101·2

3

= 0,101100000000101101·2

1

Mnożenie. Mnożymy mantysy i dodajemy cechy. Dla liczb x = m·2

c

i y = n·2

d

mamy x·y=

m·n2

c+d

. Na przykład dla x = 0,10110·2

5

i y = 0,101101·2

-2

mamy

x·y = 0,10110·2

5

· 0,101101·2

-2

= 0,01111011110·2

3

= 0,1111011110·2

2

(5)

Kodowanie obrazów.

Omówiliśmy kodowanie (reprezentacje) tekstu. Teraz omówimy kodowanie obrazów, a więc całych ekranów.

Pierwszy system kodowania nazywamy grafiką rastrową. Każdy obraz dzielimy na małe punkty zwane pikselami (pixel skrót od „picture element”). Im więcej pikseli tym lepsze odwzorowanie obrazu. Układ zakodowanych pikseli całego obrazu nosi nazwę bit mapy (mapy bitowej).

Jeden pojedynczy piksel kodujemy za pomocą różnych metod:

1. W przypadku tekstu (lub prostych schematów rysunkowych) to każdy piksel jest albo biały albo czarny. Zatem do zakodowania jednego piksela wystarczy jeden bit: 0 gdy piksel jest biały i 1 gdy piksel jest czarny,

2. W przypadku biało-czarnego obrazu (w różnej skali szarości) jeden piksel kodujemy za pomocą jednego bajta (1B = 8 bitów). Zatem mamy 2

8

= 256 odcieni szarości od koloru białego do czarnego,

3. W przypadku kolorowego obrazu kolor piksela kodujemy 3 bajtami. Każdy bajt reprezentuje intensywność następujących podstawowych kolorów;

Czerwony – Red – 1B – 256 możliwości Zielony – Green – 1B – 256 możliwości Niebieski – Blue – 1B – 256 możliwości

Zatem każdy piksel może przyjmować 256·256·256 = 2

24

~16 mln kolorów.

Inny system to CMYK oparty na kolorach:

Zielononiebieski – Cyan Purpurowy – Magenta Żółty – Yellow

Czarny – BlacK

Istnieją inne systemy zapisywania kolorów pikseli: HSV, HSB,…

Wadą bitmapy w przypadku kolorowego obrazu jest: ogromna ilość informacji do przesłania i

nie ma możliwości dobrego skalowania (powiększania)

(6)

Drugiej z tych wad (brak możliwości dobrego skalowania) nie ma inny system zapisywania obrazów, tzw. grafika wektorowa. Zamiast zapamiętywać wszystkie piksele obrazu i ich kolory zapamiętujemy tylko figury geometryczne znajdujące się na obrazie: odcinek, łuk, okrąg, prostokąt itp. Na przykład dla odcinka na obrazie zamiast zapamiętywać wszystkie punkty tego odcinka (jako piksele) wystarczy zapamiętać, że jest to odcinek i jego punkty końcowe. Podobnie okrąg, pewne krzywe itd.

Łatwo wówczas skalować takie obrazy.

Formaty zapisu grafiki wektorowej to: .CDR (CorelDraw), EPS (Encapsulated PostSript), WMF (Windows Meta File), SVG.

Oczywiście każdy z tych systemów ma swoje wady i zalety. Pierwszy (rastrowy) nadaje się w przypadku zapisywania fotografii, dzieł malarskich, które trudno opisać geometrycznie. Drugi system (wektorowy) lepiej sprawdza się w przypadku rysunków technicznych, czcionek, schematów itp.

Kompresja obrazów. Ze względu na dużą wielkość reprezentacji obrazów (zwłaszcza rastrowych) zostały rozwinięte specjalne metody kompresji obrazów:

1. GIF (Graphic Interchange Format) . Redukuje ogromną liczbę kolorów, jakie mogą mieć piksele (około 16 mln = 2

24

) do 256 (2

8

czyli 1B).

2. JPEG (rozwinięty przez Joint Photographic Experts Group w ramach ISO) łączy piksele w grupy.

3. TIFF (Tagged Image File Format) dołącza również informacje o obrazie.

Cytaty

Powiązane dokumenty

Jeżeli dzieci mają problem ze zrozumieniem toku postępowania, nauczyciel wyjaśnia, że w każdym przypadku w matematyce, kiedy coś będzie się dokładać, coś dochodzić

Nauczyciel przedstawia algorytm dodawania liczb całkowitych o różnych znakach i takich samych

Praca zbiorowa, Matematyka 2001 podręcznik dla 5 klasy szkoły podstawowej, WSiP, Warszawa 2006.. Cyfra musi być wpisana przed wykonaniem

Musimy tak łączyć, aby łatwo nam było policzyć, czyli dodajemy najpierw do siebie liczby ujemne.. Musimy tak łączył, aby najlepiej sumy się zerowały ( dodajemy liczby

Zadanie do odesłania w formie zdjęcia zbiorek str.136 zad.9 4.. Wykonaj zadania zbiorek

Odejmowanie liczby można zastąpić dodawaniem liczby do niej

Odejmowanie liczby można zastąpić dodawaniem liczby do niej

Odejmowanie liczby można zastąpić dodawaniem liczby do niej