Dane, informacja, programy Kodowanie danych, kompresja stratna i bezstratna
DANE Uporządkowane, zorganizowane fakty. Główne grupy danych: tekstowe (znaki alfanumeryczne, znaki specjalne) graficzne (ilustracje, rysunki, fotografie) dźwiękowe (audio-data) filmowe (video-data): - animacja - ruch rzeczywisty
Dane a informacja Dane Przetwarzanie Informacja Ang.: information meaningful piece of data UWAGA: Procesor przetwarza tylko cyfrową reprezentację danych, a więc ciągi zer i jedynek. Dane (wszystkie 4 grupy) i programy muszą być zakodowane.
Systemy kodowania danych Oparte na systemie binarnym. Przykład: litera H kod ASCII 72 binarnie 01001000 (2 6 +2 3 =64+8) litera I kod ASCII 73 binarnie 01001001 (2 6 +2 3 +2 0 =64+8+1) Napis HI na klawiaturze Kodowanie w systemie ASCII Przetwarzanie przez procesor Dekodowanie Ekran
Jednostki pamięci dla danych BIT (Binary Digit) Bajt=8 bitów Wielokrotności bajtów Nazwa Symbol Mnożnik dziesiętny Mnożnik binarny Kilobajt kb 10 3 2 10 Megabajt MB 10 6 2 20 Gigabajt GB 10 9 2 30 Terabajt TB 10 12 2 40 Petabajt PB 10 15 2 50 Eksabajt EB 10 18 2 60 Zettabajt ZB 10 21 2 70 Jottobajt JB 10 24 2 80
Systemy liczbowe Dziesiętny: 0,1,, 9 Dwójkowy (binarny, cyfrowy): 0,1 Ósemkowy (oct): 0,1,,7 Szestnastkowy (heksadecymalny): 0,1,,9,A,B,,F Przykład: (248) 10 =(11111000) 2 =(370) 8 =(F8) 16 bo:
Przykład c.d. tak, jak 248=2*10 2 +4*10 1 +8*10 0 analogicznie (11111000) 2 =1*2 7 +1*2 6 +1*2 5 +1*2 4 +1*2 3 =(248) 10 (370) 8 =3*8 2 +7*8 1 =3*64+56=192+56=(248) 10 (F8) 16 =15*16 1 +8*16 0 =240+8=(248) 10
Przykładowe systemy kodowania (dla danych tekstowych) ASCII (American Standard Code for Information Interchange) jednobajtowy, oparty na unikalnej kombinacji 8 bitów, pozwala zakodować 255 znaków EBCDIC (Extended Binary-Coded Decimal Interchange Code) też 8-bitowy, IBM UNICODE (unikod) 32-bitowy, zdolny zakodować ponad mln znaków, uniwersalny
Przykłady kodów ASCII i UNICODE Znak Kod ASCII Wartości bitów 32 00100000 A 65 01000001 C 67 01000011 a 97 01100001 7 55 00110111 Uwaga: cyfra 7 ma reprezentację dwójkową 00000111 Unicode: Znak Kod dziesiętnie Kod szestnastkowo Ą 260 0104 Ć 262 0106 D 270 010E
Reprezentacja cyfrowa liczby rzeczywistej Liczba n-cyfrowa w systemie dziesiętnym ma postać: d n-1 d 1 d 0 gdzie d n-1,, d 1,d 0 są cyframi dziesiętnymi, czyli należą do zbioru {0,1,,9} Wartość tak zapisanej liczby dziesiętnej wynosi: d n-1 *10 n-1 + +d 1 *10 1 +d 0 *10 0
Analogiczną postać ma reprezentacja liczby naturalnej w systemie dwójkowym. Podstawa zmienia się z 10 na 2, a zestaw cyfr ogranicza się do dwóch: 1 oraz 0. Czyli liczba postaci: c n-1 c 1 c 0 gdzie c n-1,, c 1,c 0 są bitami i należą do zbioru {0,1} ma wartość c n-1 *2 n-1 + +c 1 *2 1 +c 0 *2 0
Przykład: Liczba 11001 w systemie dwójkowym oznacza wartość 2 4 +2 3 +2 0 =25 Liczby ujemne w zapisie dwójkowym poprzedza się znakiem minus, reprezentowanym przez dodatkowy bit tzw. bit znaku. Cyfra 1 na bicie znaku oznacza minus w zapisie liczby ujemnej, a 0 występuje przed liczbami nieujemnymi. A więc liczba 25 z bitem znaku ma reprezentację binarną 011001, a liczba -25: 111001 (bit znaku oznaczony czerwono)
W zapisie binarnym liczby rzeczywistej uwzględnia się część całkowitą i ułamkową. Jeżeli na część całkowitą przeznaczy się n bitów, a na część ułamkową k bitów, to binarna reprezentacja liczby rzeczywistej będzie miała postać c n c n-1 c 1 c 0 c -1 c -k, gdzie c n bit znaku c n-1 c 1 c 0 kolejne cyfry binarnego rozwinięcia części całkowitej liczby c -1 c -k kolejne cyfry binarnego rozwinięcia części ułamkowej liczby
Zatem ciąg bitów c n c n-1 c 1 c 0 c -1 c -k reprezentuje wartość równą (-2*c n +1)*( c n-1 *2 n-1 + +c 1 *2 1 +c 0 *2 0 +c -1 *2 _1 + +c -k *2 -k ), gdzie pierwszy czynnik nadaje znak liczbie, ponieważ: -2*c n +1= 1 gdy c n = 1 1 gdy c n = 0
Przykład: Załóżmy, że n=k=8 Wtedy liczba 12,635 będzie miała rozwinięcie binarne postaci: 0 00001100 10100000, bo 0,625=0,5+0,125=2-1 +2-3 A liczba -127,3125 ma rozwinięcie postaci: 1 01111111 01010000, bo 0,3125=0,25+0,0625=2-2 +2-4
Kod uzupełnieniowy liczby całkowitej Inny sposób reprezentacji liczby: x uzup = x gdy x 0 2 n x gdy x < 0 gdzie x oznacza wartość bezwzględną x, natomiast n jest liczbą bitów na reprezentację liczby (łącznie z bitem znaku). Przykład: dla n=8 liczba -75 w kodzie uzupełnieniowym przybiera postać 10110101, ponieważ I-75I=01001011, 2 8 =100000000,
Zatem 2 8 -I-75I=100000000-01001011=10110101 Kod uzupełnieniowy dla ułamków wyraża się wzorem: x dla x 0 x uzup = 2 x dla x < 0
Dokładność obliczeń Liczby całkowite system stałoprzecinkowy Dokładne wartości, ale mały zakres, bo: na 1 bajcie albo tylko liczby dodatnie z przedziału (0; 255) albo dodatnie i ujemne z (-128; 127) Na 2 bajtach analogicznie tylko liczby dodatnie z przedziału (0; 65 535) albo dodatnie i ujemne z przedziału (-32 768; 32767)
Liczby rzeczywiste problem przy zapisie stałoprzecinkowym, bo: jeszcze mniejszy zakres wartości oraz marnotrawstwo bitów. Poza tym błędy odczytów i błędy reprezentacji cyfrowej.
Przykład (na mały zakres): 2 bajty 1 przeznaczony na część całkowitą i 1 na część ułamkową Wtedy największa wartość rzeczywista zapisana na 2 bajtach to: 1 1 1 1 1 1 1 1, 1 1 1 1 1 1 1 1 a więc 255 255 256
Przykład (na marnotrawstwo bitów): Przy założeniu jak wyżej reprezentacja liczby 0,5 ma postać: 0 0 0 0 0 0 0 0, 1 0 0 0 0 0 0 0
Przykład (na błędy reprezentacji): a) 1 0 0 0 0 0 0 0, 0 0 0 0 0 0 0 1 I 1 1 0 1 0 1 b) 0 0 0 0 0 0 0 1, 0 0 0 0 0 0 0 1 I 1 1 1 1 1 c) 0 0 0 0 0 0 0 0, 0 0 0 0 0 0 0 1 I 1 0 1 1 1 Zawsze odcinamy dziewiąty bit, czyli wartość 2 9 = 1 2 9 = 1 512 = 0,001953125
Jest to błąd bezwzględny reprezentacji tych liczb. Policzmy błąd względny w każdym z tych przypadków, wiedząc że 2 8 = 1 2 8 = 1 256 = 0,00390625 a) 0,001953125 128,00390625 100% 0,001526% b) 0,001953125 1,00390625 c) 0,001953125 0,00390625 100% 0,194552% 100% 50%
Czyli: błąd względny reprezentacji binarnej liczby w zapisie stałoprzecinkowym zależy od wielkości tej liczby!
Zapis zmiennoprzecinkowy liczba zmiennopozycyjna Liczba przechowywana w komputerze w znormalizowanej postaci wykładniczej: L=M*N C M mantysa <1, mantysa znormalizowana mieści się w przedziale <0,1 ;1) N podstawa sytemu (potęgi) C cecha, czyli wykładnik potęgi, dzięki któremu przecinek w liczbie zostaje przesunięty tak, aby utworzyć mantysę w zgodzie z powyższą definicją
Przykłady: 2340,23=0,234023*10 4 C=4 2,34023=0,234023*10 1 C=1 0,15934=0,15934*10 0 C=0 0,00015934=0,15934*10-3 C=-3 W takim zapisie gwałtownie zwiększa się zakres wartości reprezentowanych liczb.
Przykład: Przy reprezentacji 2-bajtowej, z czego 1 bajt przeznaczony jest na reprezentację cechy i 1 na reprezentację mantysy, liczba 0 0 0 0 0 0 1 1 1 0 1 0 0 0 0 0 c e c h a m a n t y s a przedstawia wartość 0,625*10 3
Ważne: przy obliczaniu błędu względnego wartość cechy nie ma znaczenia! błąd N C błąd liczba NC 100% = 100% liczba Policzmy największy możliwy błąd bezwzględny przy zapisie zmiennopozycyjnym w naszym przykładzie: Najmniejsza mantysa (0,1000000) 2 =(0,5) 10
Największy błąd bezwzględny gdy obcinamy bity z samymi jedynkami, czyli 2 9 + 2 10 + 2 11 + = 1 512 + 1 1024 + 1 2048 + = 1 512 = 2 512 = 1 256 = 0,00390625 1 1 2 (bo suma nieskończonego ciągu geometrycznego S = a 0 ) 1 q
Stąd : Maksymalny błąd względny, obliczany jako iloraz maksymalnego błędu bezwzględnego i najmniejszej mantysy, wynosi 0,00390625 100% 0,78123 0,5 Wnioski: Przy 1 bajcie na mantysę błąd względny < 0,8% (górna granica błędu)
Cecha jednobajtowa daje nam już zakres (gdy dodatnie i ujemne) 2 128 3,4 10 38 oraz 2 127 5,8 10 39 Zatem: Za dokładność reprezentowanych liczb odpowiada mantysa Za zakres wartości tych liczb odpowiada cecha