Podstawy arytmetyki komputerowej c.d. Cezary Bolek Uniwersytet Łódzki Wydział Zarządzania Katedra Informatyki Liczby całkowite Za pomocą n-bitów moŝna zapisać dokładnie 2 n róŝnych liczb całkowitych (NKB, U2) NKB liczby całkowite z zakresu...2 n -1 U2 liczby całkowite z zakresu 2 n-1...+2 n-1-1 2 n liczb NKB U2 1 2 3... I max =2 n -1 I -2-1 1 2 I max= 2 n-1 min =2 n-1...... -1 Arytmetyka liczb całkowitych Kod BCD (Binary Coded Decimal) Dla n-bitowego zapisu liczb całkowitych: 1. MoŜliwe jest zapisanie wszystkich liczb z dostępnego zakresu. 2. Działania arytmetyczne (+,-,*,div,mod) dają zawsze wyniki całkowite dokładne (bez przybliŝeń lub zaokrągleń). 3. Błąd przekroczenia zakresu (overflow) jest sygnalizowany: a) wystąpieniem bitu przeniesienia (w NKB) b) zmianą znaku wyniku (w U2 dla dwóch liczb o tych samych znakach) KaŜda cyfra dziesiętna kodowana jest oddzielnie na 4 bitach. Dopuszczalne są tylko kombinacje od do 11. 17 BCD 11 11 b 1 111 b 95 BCD Kod BCD powala uniknąć konwersji pomiędzy systemem dziesiętnym a binarnym, ale zapis liczb wymaga więcej miejsca i bardziej złoŝonych (wolnych) algorytmów operacji arytmetycznych. 1
Liczby wymierne Liczby dwójkowe w postaci m.n x Zapis ułamkowy jest mało wygodny do potrzeb zapisu komputerowego. y Zapis z kropką oddzielającą część całkowitą od ułamkowej n.m nadaje się tylko do bardzo ograniczonego zakresu liczb o ustalonej długości pól m i n. (zapis stałopozycyjny) np. obliczenia walutowe w zakresie.... 999999.99 kaŝda liczba kodowana w BCD zajmuje 4b. Zapis typu n.m obowiązuje w systemie pozycyjnym o dowolnej podstawie, równieŝ dla liczb dwójkowych a m... a 1 a. a -1 a -2... a -n a m 2 m +...+ a 1 2 1 + a 2 + a -1 2-1 +... + a -n 2 -n 11.11 b = 2 2 +2 +2-1 +2-2 =4+1+.5+.25=5.75 1.1 b = 4 + 1/8 = 4.125 Zapis zmiennopozycyjny (floating point) Zapis zmiennopozycyjny (floating point) KaŜdą liczbę moŝna zapisać w postaci ±X * b Y, gdzie: X mantysa (część ułamkowa), Y wykładnik, b podstawa systemu liczbowego 1496. =.1496*1 9 -.7652 = -76.52*1-6 Zapis zmiennopozycyjny nazywa się równieŝ notacją naukową. Notacja naukowa pozwala na zwarty zapis zarówno liczb bardzo duŝych, jak i małych. 1496. =.1496E9 -.7652 = -76.52e-6 2
Zapis liczb dwójkowych zmiennopozycyjnych Ogólna postać liczby: ± X*2 Y 111 b =.111 b *2 5 -.11 b = -1.1 b *2-7 W systemie dwójkowym: 111 =.111*1 11 -.11 = -1.1*1-111 Postać znormalizowana Postać znormalizowana liczby: tylko jedna cyfra znacząca przed kropką 1496. = 1.496E8 -.7652 = -7.652e-5 111. b = 1.11 b *2 8 -.11 b = -1.1 b *2-7 W systemie dwójkowym, liczby znormalizowane zawsze mają mantysę z cyfrą 1 przed kropką. Kod IEEE754 IEEE754 c.d. IEEE Institute of Electrical and Electronics Engineers IEEE754 (1985) - norma dotycząca zapisu binarnego liczb zmiennopozycyjnych Liczbę binarną o postaci (-1) s * 1.f * 2 e-127 zapisuje się na 32-bitach następująco: s e f znak 1 bit wykładnik 8 bitów mantysa 23 bity (-1) s * 1.f * 2 e-127 Mantysa zapisywana jest bez wiodącej cyfry 1, co pozwala oszczędzić miejsce Wykładnik zapisany jest w formie przesuniętej, tj. zwiększony o 127, co pozwala na uniknięcie liczb ujemnych w jego zapisie. 1111... b = -1 * 1.1 b *2 129-127 = -1.1 b *2 2 = -5 11... b = +1 * 1. b *2 96-127 = 1 * 2-31 4.65e-1 3
Dec IEEE754 IEEE754 kody specjalne -7.25-111.1 b -1.111 b *2 2 zero dodatnie zero ujemne zdenormalizowana + nieskończoność - nieskończoność nie-liczba (NaN) znak 1 lub 1 1 lub 1 wykł. 255 255 255 mantysa 1 11 111 liczba dodatnia 1...254 dowolna liczba ujemna 1 1...254 dowolna Ograniczenia zapisu zmiennopozycyjnego Ograniczenie zakresu: skończona długość pola wykładnika Ograniczenia zapisu zmiennopozycyjnego Ograniczenie dokładności: skończona długość pola mantysy R max -R max -R min R min R max 1.f*2 k 1.f*2 k+1 1.f*2 k+1 1.f*2 k+2 1.f*2 k+3 IEEE754 single precision (32 bity) R min 1.1754943e-38 1... b R max 3.428235e+38 X111111111111...111 b Zapisać moŝna tylko niektóre liczby wymierne. Zagęszczenie liczb jest zmienne i zaleŝy od wartości wykładnika. W kaŝdym przedziale pomiędzy 2 i i 2 i+1 znajduje się tyle równomiernie rozłoŝonych liczb, na ile kombinacji pozwala długość pola mantysy. Dla liczb bliskich R min dokładność jest największa, ale zakres najmniejszy, dla liczb bliskich R max najmniejsza, a zakres największy. 4
Liczby całkowite vs zmiennopozycyjne Za pomocą n-bitów moŝna zapisać dokładnie 2 n róŝnych liczb całkowitych (NKB, U2) NKB 1 2 3 2 n liczb... I max =2 n -1 Za pomocą n-bitów moŝna zapisać mniej niŝ 2 n róŝnych liczb wymiernych (IEEE754) -R max -R min R min R max Z n-bitów moŝna utworzyć 2 n róŝnych kombinacji binarnych. Znaczenie tych kombinacji zaleŝy od interpretacji. W przypadku zapisu zmiennopozycyjnego, dostępne wartości są jedynie inaczej rozłoŝone na osi liczbowej, ale jest ich niemal tyle samo co liczb całkowitych. Single vs Double Precision IEEE754 Single Precision: 32 bity 8b wykładnik + 23b mantysa R min 1-38 R max 1 +38 dokładność około 7 cyfr znaczących Double Precision: 64 bity 11b wykładnik + 52b mantysa R min 1-38 R max 1 +38 dokładność około 16 cyfr znaczących Arytmetyka liczb zmiennopozycyjnych Dla zapisu zmiennopozycyjnego IEEE754: 1. NiemoŜliwe jest zapisanie wszystkich liczb z dostępnego zakresu. 2. Działania arytmetyczne (+,-,*,/) dają wyniki obarczone błędem przybliŝenia. 3. Błąd zakresu (niedomiar lub przepełnienie) jest sygnalizowany kodem specjalnym IEEE754 4. Błąd przybliŝenia nie jest sygnalizowany. 5. Operacje arytmetyczne wymagają skomplikowanych algorytmów. Dodawanie liczb IEEE754 Dodawanie: 1. Sprowadź liczby do wspólnego większego wykładnika 2. Dodaj mantysy (ze znakiem) 3. Normalizuj wynik 1.111*2 2 + 1.1*2-1 1.111*2 2 +.11*2 2 1.111.11 1.1 1.1*2 2 = 1.1*2 3 Po kaŝdym kroku algorytmu naleŝy dodatkowo sprawdzać czy nie powstał niedomiar lub przepełnienie i na końcu zaokrąglić wynik, jeśli potrzeba. 5
MnoŜenie liczb IEEE754 Konwersja pomiędzy systemami MnoŜenie: 1. Dodaj wykładniki obu liczb 2. PomnóŜ mantysy (ze znakiem) 3. Normalizuj wynik 1.111*2 2 * 1.1*2-1 2+(-1) = 1 1.111 1.1 1111 1111 1.111 1.111*2 1 = 1.111*2 2 Po kaŝdym kroku algorytmu naleŝy dodatkowo sprawdzać czy nie powstał niedomiar lub przepełnienie i na końcu zaokrąglić wynik, jeśli potrzeba. Liczby o skończonej długości w jednym systemie liczbowym, mogą mieć nieskończone rozwinięcie w innym systemie liczbowym. Sytuacja taka skutkuje nieodwracalną utratą dokładności podczas przeliczania..1 3 =.333333333333333333333333 1....1 7 =.142857142857142857142857 1....1 1 =,111111111111 2... Kodowanie tekstu Podstawowy zestaw znaków: Litery alfabetu (małe i wielkie) Znaki interpunkcyjne i inne Cyfry Spacja Razem: nieco mniej niŝ 1 znaków Kod ASCII ASCII The American Standard Code for Information Interchange Standard ASCII jest kodem 7-bitowym przyjętym w 1968r. w celu uzyskania podstawowej kompatybilności pomiędzy róŝnymi systemami komputerowymi. Kodowanie znaku wymaga minimum 7 bitów. W praktyce kodowanie tekstu wymaga 1Bajtu na zapis kaŝdego znaku tekstu. Jakie wartości naleŝy przypisać poszczególnym znakom czyli jaki standard kodowania? 6
ASCII c.d...31 (..1F h ) kody sterujące dla terminala bs back space cofnięcie kursora lf line feed przesunięcie kursora do nowej linii (w dół) cr carriage return powrót kursora (karetki) na początek linii esc escape kod ucieczki, sygnalizacja sytuacji specjalnej 32 (2 h ) kody znaku odstępu (spacja) 48..57 (3..39 h ) kody znaków cyfr (..9) 65..9 (41..5A h ) kody wielkich liter (A..Z) 97..122 (61..7A h ) kody małych liter (a..z) Strony kodowe Standard ASCII nie definiuje znaków o wartościach powyŝej 127. Niewykorzystane 128 wartości są przypisywane znaków z alfabetów narodowych, które nie występują w kodzie ASCII oraz innych znaków dodatkowych. Strona kodowa (Code Page) określa standard wykorzystania znaków o kodach od 128 do 255. Polskie strony kodowe (niektóre): DOS cp852, Mazovia,... Windows cp125 Unix, Internet iso-8859-2 ISO/IEC 8859 ISO/IEC 8859 ISO/IEC 8859 - zestaw standardów słuŝących do kodowania znaków za pomocą 8-bitów Standardy te zostały utworzone przez European Computer Manufacturers Association w połowie lat 8-tych, po czym zostały uznane przez ISO Wszystkie zestawy ISO 8859 mają znaki d -127 d ( h -7F h ) takie same jak w kodzie ASCII Pozycjom 128 d -159 d (8 h -9F h ) przypisane są dodatkowe kody sterujące, tzw. C1 (obecnie nie są uŝywane) W czerwcu 24 roku, grupa robocza odpowiedzialna za utrzymanie zestawów znaków kodowanych ośmiobitowo została rozwiązana, a co za tym idzie, wstrzymane zostały prace związane z ISO 8859, a skoncentrowano się na uniwersalnym zestawie znaków (UCS) i Unicode Stosowane standardy ISO 8859: ISO 8859-1 (Latin-1) - alfabet łaciński dla Europy zachodniej ISO 8859-2 (Latin-2) - łaciński dla Europy środkowej i wschodniej ISO 8859-3 (Latin-3) - łaciński dla Europy południowej ISO 8859-4 (Latin-4) - łaciński dla Europy płnocnej ISO 8859-5 (Cyrillic) - dla cyrylicy ISO 8859-6 (Arabic) - dla alfabetu arabskiego ISO 8859-7 (Greek) - dla alfabetu greckiego ISO 8859-8 (Hebrew) - dla alfabetu hebrajskiego ISO 8859-9 (Latin-5) ISO 8859-1 (Latin-6) ISO 8859-11 (Thai) - dla alfabetu tajskiego ISO 8859-12 - brak ISO 8859-13 (Latin-7) ISO 8859-14 (Latin-8) ISO 8859-15 (Latin-9) ISO 8859-16 (Latin-1) - łaciński dla Europy środkowej 7
Windows-125 Windows-125 (CP-125) - strona kodowa uŝywana przez system Microsoft Windows do reprezentacji tekstów w językach środkowoeuropejskich uŝywających alfabetu łacińskiego Obsługiwane języki: albański, chorwacki, czeski, polski, rumuński, słowacki, słoweński, węgierski, niemiecki Windows-125 jest podobny do ISO 8859-2 - posiada wszystkie jego drukowalne znaki (a takŝe kilka dodatkowych), lecz kilka z nich zajmuje inne miejsca Windows-125 ISO 8859-2 ASCII w praktyce Standardy kodowania nowej linii: DOS, Windows: cr+lf Unix: lf Mac OS: cr Problem z wyświetlaniem polskich znaków: Tekst zapisany w standardzie ISO-8859-2: 44 7A 69 65 F1 D A 69 2 6E 6F 63 2E D z i e ń i n o c. znak o kodzie > 128 litera ń w kodzie cp125 Dzień i noc. Tekst wyświetlony w Notatniku systemu Windows (Windows-125): cr lf spacja ISO/IEC 1646 - Universal Character Set ASCII standard ograniczony + kłopoty ze stronami kodowymi Rozwiązanie: zebranie razem w jednym zestawie kodów znaków wszystkich języków świata (języki europejskie, cyrylica, hebrajski, arabski, japoński, chiński, hieroglify, etc.) oraz róŝne symbole (techniczne, prawne, medyczne, muzyczne, wymowy, etc.). Standard ISO/IEC 1646 definiuje znaki za pomocą 4 bajtów (32 bity) Unicode (Unikod) Równolegle z ISO/IEC 1646 opracowano inny standard: przyporządkowanie znaków, kodowanie danych, zasady typografii i składu UNICODE. Od 1991 ISO/IEC 1646 oraz UNICODE posługują się tym samym zestawem znaków. KaŜdy kod Unicode jednoznacznie identyfikuje symbol na dowolnym komputerze na Ziemi i pozwala umieszczać razem w jednym dokumencie teksty w róŝnych językach. Dla zapewnienie kompatybilności z kodem ASCII, pierwsze 128 kodów w obu standardach określa te same znaki. Plane Range Description Abbreviation FFFF Basic Multilingual Plane BMP 1 1 1FFFF Supplementary Multilingual Plane SMP 2 2 2FFFF Supplementary Ideographic Plane SIP 3 to 13 3 DFFFF currently unassigned 14 E EFFFF Supplementary Special-purpose Plane SSP 15 F FFFFF Supplementary Private Use Area-A 16 1 1FFFF Supplementary Private Use Area-B http://www.unicode.org 8
Unicode kodowanie znaków UCS Zakres: Znaczenie: - 7F Basic Latin (to samo co w ASCII) 8 - FF Latin-1 Supplement (to samo co w ISO/IEC 8859-1) 1-17F Latin Extended-A 18-24F Latin Extended-B 25-2AF IPA Extensions 2B - 2FF Spacing Modifiers Letters... 37-3FF Greek 4-4FF Cyrillic... 1D - 1D7F Phonetic Extensions Standardy Kolejnością ułoŝenia bajtów w słowie: 1D8-1DBF Phonetic Extensions Supplement 1E - 1EFF Latin Extended Additional Little Endian pierwszy jest mniej 1F - 1FFF Greek Extended znaczący bajt (Windows) Big Endian pierwszy jest bardziej znaczący bajt UCS-2 kodowanie za pomocą dwóch bajtów (tylko Basic Multilingual Plane) UCS-4 kodowanie za pomocą czterech bajtów (wszystkie moŝliwe znaki) Basic Multilingual Plane Unicode kodowanie znaków UTF Metody kodowania UTF (Unicode Transformation Format) UTF-7 kodowanie opracowane na potrzeby poczty elektronicznej (załączniki MIME), mało popularne kodowanie 7-bitowe UTF-8 - kodowanie 8-bitowe ze zmienną długością kodowania, zgodne z ASCII UTF-16 - kodowanie 16-bitowe ze zmienną długością kodowania UTF-32/UCS-4 - kodowanie 32-bitowe Unicode - kodowanie UTF-8 UTF-8 - system kodowania ze zmienną długością reprezentacji znaku Znaki Unikodu są mapowane na ciągi bajtów x do x7f - bity xxxxxxx x8 do x7ff - bity 11xxxxx 1xxxxxx x8 do xffff - bity 111xxxx 1xxxxxx 1xxxxxx x1 do x1fffff - bity 1111xxx 1xxxxxx 1xxxxxx 1xxxxxx x2 do x3ffffff - bity 11111xx 1xxxxxx 1xxxxxx 1xxxxxx 1xxxxxx x4 do x7fffffff - bity 111111x 1xxxxxx 1xxxxxx 1xxxxxx 1xxxxxx 1xxxxxx Z powodu takiego kodowania ten sam znak moŝna zapisać na kilka sposobów, np znak a : 111 111 111 111 11 111 Standard UTF-8 przewiduje, Ŝe kaŝdy program MUSI odrzucać wszystkie znaki zapisane sekwencjami dłuŝszymi niŝ minimalna. Unicode - kodowanie UTF-8 Zalety kodowania UTF-8 kaŝdy tekst w ASCII jest tekstem w UTF-8, a Ŝaden znak spoza ASCII nie zawiera bajtu z ASCII typowy tekst ISO-Latin-x rozrasta się w bardzo niewielkim stopniu po przekonwertowaniu go do UTF-8 (teksty w języku polskim zwiększają objętość jedynie o kilka procent) o kaŝdym bajcie wiadomo czy jest początkiem znaku, czy teŝ leŝy w środku Nie ma problemów z little endian vs. big endian. Wady kodowania UTF-8 znaki alfabetów niełacińskich zajmują po kilka bajtów zamiast jednego jak jest to w kodowaniach narodowych Nie wszystkie systemy i programy posługują się Unikodem Tekst w Unicode moŝe być nawet 2 razy większy od ASCII 9
Unicode w praktyce Kodowanie dźwięku Utf-8: w zaleŝności Dźwięk: drgania cząsteczek powietrza odbierane jako zmiany ciśnienia poruszające membranę mikrofonu. 77 2 7A 61 6C 65 C5 BC 6E 6F C5 9B 63 69 w z a l e Ŝ n o ś c i spacja polska litera Ŝ polska litera ś odchylenie membrany Amplituda drgań: głośność dźwięku Częstotliwość drgań: wysokość dźwięku Próbkowanie: pomiar wielkości ciągłej w określonych momentach czasowych. czas Częstotliwość próbkowania musi być większa od największej częstotliwości zmian próbkowanego sygnału. Kodowanie dźwięku Układ rejestracji dźwięku mikrofon Układ odtwarzania dźwięku RAM pamięć DAC przetwornik cyfra/analog ADC przetwornik analog/cyfra głośnik RAM pamięć Compact Disc Standard: przetworniki ADC/DAC 16-bitowy (kaŝda próbka 2B) częstotliwość próbkowania 44kHz (pomiar co 23µs) 1s dźwięku (mono) 86kB, 1h 32MB Kodowanie obrazu Obraz monochromatyczny punkt obrazu kodowany 1 bitem. linie obrazu 1 bajt 1 bajt długość linii obrazu pamięć obrazu: 16 linii x 2B = 32B 111 11 11 11 11 11 11 11 11 11 11 11 11 11 111 11 1
Kodowanie obrazu głę bokoś ć koloru Obraz kolorowy punkt obrazu kodowany 1B, 2B, 3B lub 4B 8-bitowa głębokość koloru 256 kolorów 16-bitowa głębokość koloru 65536 kolorów 24,32-bitowa głębokość koloru 16.7 milionów kolorów pamięć obrazu: 16p x 16p x 1B = 256B Kompresja danych Kompresja danych zmniejszanie rozmiaru danych poprzez usuwanie redundancji (nadmiaru informacji). Kompresja bezstratna: moŝliwe jest odtworzenie oryginalnej postaci danych (pakowanie programów, tekstów, grafiki) ZIP, GIF rozdzielczość pionowa 64x48x8bpp = 3kB 124x768x8bpp=768kB 64x48x24bpp = 9kB 124x768x24bpp=2.25MB Kompresja stratna: nie jest moŝliwe odtworzenie oryginalnej postaci danych, ale postać skompresowana jest wystarczająco podobna do oryginału (pakowanie danych multimedialnych: grafika, dźwięk) JPG, MP3 rozdzielczość pozioma bpp bits per pixel Kompresja bezstratna Najczęściej uŝywane metody kompresji bezstratnej to: metody słownikowe, które polegają na poszukiwaniu dokładnych wystąpień danego ciągu znaków lub bitów, np. zastępują wyraz auto krótszą ilością bitów niŝ jest potrzebna na zakodowanie 4 niezwiązanych znaków. Jednak znajomość symbolu auto nie pociąga za sobą usprawnień w kompresowaniu np. wyrazu autor. metody statystyczne, które uŝywają mniejszej ilości bitów dla częściej występujących symboli. W przypadku praktycznie wszystkich, oprócz najprostszych metod, prawdopodobieństwa zaleŝą od kontekstu. A wiec np. dla liter sz uŝywają mniejszej ilości bitów niŝ dla dwóch oddzielnych znaków. Kompresja stratna Kompresja stratna jest moŝliwa ze względu na sposób działania ludzkich zmysłów, tj. zmienną wraŝliwość na odbiór róŝnych części danych. Algorytmy kompresji stratnej zazwyczaj posługują się modelami psychoakustycznymi, modelami psychowizualnymi itd., aby odrzucić najmniej istotne dane o dźwięku, obrazie, pozostawiając dane o wyŝszej wartości dla rozpoznawania tej informacji (akustycznej, wizualnej) przez zmysły. Nie istnieją algorytmy kompresji stratnej, które moŝna stosować do dowolnego typu danych (kompresja stratna plików wykonywalnych jest niemoŝliwa, gdyŝ nie jest to informacja odczytywana przez zmysły, a przez maszynę). Obraz: JPEG, Video: DivX, MPEG, Real Video Audio: MP3, OGG Vorbis, Real Audio, 11
JPEG Motto Obraz oryginalny Kompresja 75% There are 1 kinds of people: those who understand binary and those who do not. Kompresja 95% 12