kodowanie
Transkrypt
kodowanie
Reprezentacja liczb rzeczywistych w komputerze. Liczby rzeczywiste są reprezentowane w komputerze przez liczby zmiennopozycyjne. Liczbę k można przedstawid w postaci: k = m * 2c gdzie: m – częśd ułamkowa, mantysa (fraction) c – wykładnik, cecha (exponent) Zakres takiej reprezentacji liczb zależy od liczby cyfr wykładnika, a dokładnośd od liczby cyfr mantysy. Reprezentacja 32-bitowa (1+8+23, nadmiar 128) Rozważmy następujący format liczby zmiennopozycyjnej zapisanej binarnie na 4 bajtach (32 bitach): znak 1bit wykładnik 8 bitów Mantysa 23 bity Znak - Pierwszy bit jest bitem znaku; 0 – liczba dodatnia; 1 – liczba ujemna Mantysa - Liczby są znormalizowane, co oznacza, że wartośd dziesiętna mantysy (m) spełnia warunek: 0.5<= m <1. Zatem pierwszy bit mantysy zapisanej dwójkowo ma wartośd „1”. Jeśli tak jest dla każdej liczby, nie musi on byd przechowywany w reprezentacji, dzięki czemu uzyskuje się większą dokładnośd (24 bity zamiast 23). Zakres mantysy to <0.5; 1-2 -24>. Mantysa wypełniona „0” odpowiada liczbie dwójkowej 0.1, a dziesiętnej 0.5, natomiast mantysa wypełniona samymi „1” odpowiada liczbie dwójkowej 0.11111…1 (24 pozycje o wartości „1”), czyli dziesiętnie 1-2 -24 Wykładnik jest dodatni; stosuje się kod z nadmiarem 128 - do rzeczywistej wartości wykładnika liczby dodawane jest 128. Zakres wykładnika to <-128; 127>. Wykładnik 00000000 oznacza wartośd -128, natomiast 11111111 to wartośd 255-128, czyli 127. Liczby zmiennopozycyjne nie tworzą continuum, lecz są skooczonymi zbiorami. Przy pomocy reprezentacji 32-bitowej jesteśmy w stanie zapisad 232 różnych liczb, których wartości rozłożone są na osi liczbowej nierównomiernie w dwóch przedziałach: <-(1-2-24) * 2 127; -0.5 * 2 -128> i <0.5 * 2 -128; (1-2-24) * 2 127> czyli <-(1-2-24) * 2 127; -2 -129> i < 2 -129; (1-2-24) * 2 127> Pozostałe obszary na osi liczbowej nie dadzą się przedstawid za pomocą tej reprezentacji. Są to przepełnienie (nadmiar) ujemny, niedomiar ujemny, wartośd 0, niedomiar dodatni oraz przepełnienie dodatnie. Za pomocą takiej reprezentacji nie można zapisad zera. Liczby najbliższe wartości 0 to -2-129 i 2-129. Przykład: Zapiszmy liczbę -215.67 w przedstawionym powyżej formacie (na 32 bitach, wykładnik z nadmiarem 128). 1. Należy zapisad wartośd bezwzględną, czyli liczbę 215.67 w systemie binarnym Częśd całkowita: 21510 = 12810 + 6410 + 1610 + 410 + 210 + 110 = 110101112 Częśd ułamkowa: 0.67 0 1.34 1 0.68 0 1.36 1 0.72 0 1.44 1 0.88 0 1.76 1 1.52 1 1.08 1 0.16 0 0.32 0 0.68 0 dalej – ułamek okresowy 0.67 = 0.10101011100(0101011100)….. Cała liczba: 11010111.1010101110001010111002 2. Normalizacja liczby: 11010111.1010101110001010111002 = 0.110101111010101110001010111002 * 2 8 3. Znak --- 1 4. Wykładnik = 8 + 128 --- 100010002 5. Mantysa --- 23 cyfry znaczące bez pierwszej „1” --- 10101111010101110001010 6. Pełna reprezentacja liczby 1 10001000 10101111010101110001010 Przykład Co to za liczba: 00100100000000001000000000000000 1. Wydzielamy znak, wykładnik i mantysę Znak – 0 -- liczba dodatnia Wykładnik – 01001000 = (8 + 64)10 = 7410 Rzeczywista dziesiętna wartośd wykładnika = 74 – 128 =-54 Mantysa 00000001000000000000000 Ułamek uzupełniamy „1” po kropce----- 0.100000001000000000000000 2. Liczba = 0.100000001000000000000000 * 2 -54 = 0.00000…(54 „0”)…..100000001 ≈ 2-55 Reprezentacja 16-bitowa (1+5+10, nadmiar 16) W reprezentacji na 16 bitach wykładnik zajmuje 5 bitów i jest z nadmiarem 16, natomiast mantysa jest zapisana na 10 bitach z pominięciem pierwszej „1” po kropce dwójkowej. Przykład: Zapisz liczbę 0.5 w tej reprezentacji. 1. 0.5 10 = 0.12 2. 0.1 jest liczbą znormalizowaną 3. Znak ---- 0 4. Wykładnik --- 0 + 16 ---- 10000 5. Mantysa bez pierwszej „1” --- 0000000000 6. Liczba: 0100000000000000 Przykład: Podaj wartośd dziesiętną liczby zapisanej w tej reprezentacji: 1111111111111111 1. Wydzielamy znak, wykładnik i mantysę Znak – 1 -- liczba ujemna Wykładnik – 11111 = 3110 Rzeczywista dziesiętna wartośd wykładnika = 31 – 16 =15 Mantysa 1111111111 Ułamek uzupełniamy „1” po kropce----- 0.11111111111 2. Liczba = 0.11111111111 * 215 = 1111111111100002 = 214 + 213 + ….+ 25 + 24 Reprezentacja 8-bitowa (1+3+4, nadmiar 4) W reprezentacji na 8 bitach wykładnik zajmuje 3 bity i jest z nadmiarem 4, natomiast mantysa jest zapisana na 4 bitach z pominięciem pierwszej „1” po kropce dwójkowej. Przykład: Najmniejsza dodatnia liczba w tej reprezentacji to 00000000, a jej wartośd dziesiętna to: Znak ---- 0 --- + Wykładnik ---- 000 --- 0 - 4 = -4 Mantysa ---- 0000 --- po uzupełnieniu ----- 0.1 Liczba ---- 0.1 * 2-4 = 0.000012 = 1/3210 = 0.03125 Przykład: Największa liczba tej reprezentacji to 01111111, a jej wartośd dziesiętna wynosi: Znak ---- 0 --- + Wykładnik ---- 1112 = 710 ------- 7 – 4 = 3 Mantysa ---- 0.11111 Liczba ----0.11111 *23 = 111.11 --------7.7510 Standard IEEE-754 Powszechnie stosowana w wielu systemach komputerowych reprezentacja zmiennopozycyjna zdefiniowana została przez IEEE jako standard 754. Określa ona trzy rodzaje liczb zmiennopozycyjnych: 32-bitową – pojedynczej precyzji 64-bitową – podwójnej precyzji 80-bitową – rozszerzonej precyzji Reprezentacja 32-bitowa standard IEEE-754 (1+8+23, nadmiar 127) Liczba złożona jest z bita znaku, 8-bitowego wykładnika i 23-bitowej mantysy. znak 1bit wykładnik 8 bitów Mantysa 23 bity Znak - Pierwszy bit jest bitem znaku; 0 – liczba dodatnia; 1 – liczba ujemna Mantysa - Liczby są znormalizowane, lecz inaczej niż w reprezentacji 32-bitowej z nadmiarem 128. Wartośd dziesiętna mantysy (m) spełnia warunek: 1<= m <2. Zatem mantysa składa się z „1”, kropki binarnej i ułamka, który jest jawnie zapisany na 23 bitach. Zakres mantysy to <1; 2-2 -23>. Mantysa wypełniona „0” odpowiada liczbie dwójkowej i dziesiętnej „1”, natomiast mantysa wypełniona samymi „1” odpowiada liczbie dwójkowej 1.11111…1 (1 całkowite i 23 pozycje ułamkowe o wartości „1”), czyli dziesiętnie 2-2 -23 Wykładnik jest dodatni; stosuje się kod z nadmiarem 127 (BIAS 127) - do rzeczywistej wartości wykładnika liczby dodawane jest 127. Zakres wykładnika to <-127; 128>. Wykładnik 00000000 oznacza wartośd -127, natomiast 11111111 to wartośd 255-127, czyli 128. Jednak ekstremalne wartości wykładnika, czyli same „0” i same „1” określają wartości specjalne, zatem zakres wykładnika dla zwykłych liczb w tej notacji to <-126; 127>. Przykład: Zapiszmy liczbę -215.67 (z przykładu dla reprezentacji 1+8+23 z nadmiarem 128). 1. Należy zapisad wartośd bezwzględną, czyli liczbę 215.67 w systemie binarnym (jak w rozważanym przykładzie) 2. 3. 4. 5. 215.67 = 11010111.10101011100(0101011100)….. Cała liczba: 11010111.1010101110001010111002 Normalizacja liczby: 11010111.1010101110001010111002 = 1.10101111010101110001010111002 * 2 7 Znak --- 1 Wykładnik = 7 + 127 = 135 --- 100001102 Mantysa --- 23 cyfry znaczące ułamka, bez „1” całkowitej --- 10101111010101110001010 Pełna reprezentacja liczby w standardzie IEEE754 1 10000110 10101111010101110001010 Przykład Co to za liczba: 00100100000000001000000000000000 3. Wydzielamy znak, wykładnik i mantysę Znak – 0 -- liczba dodatnia Wykładnik – 01001000 = (8 + 64)10 = 7410 Rzeczywista dziesiętna wartośd wykładnika = 74 – 127 =-53 Mantysa 00000001000000000000000 Ułamek uzupełniamy „1” i kropką binarną --- 1.00000001000000000000000 4. Liczba = 1.00000001000000000000000 * 2 -53 ≈ 2-53 Reprezentacja 64-bitowa standard IEEE-754 (1+11+52, nadmiar 1023) W standardzie IEEE754 liczby podwójnej precyzji zapisywane są podobnie do 32-bitowych,ale wykorzystuje się 64 bity. Wykładnik ma 11 bitów i stosuje się nadmiar (BIAS) 1023. Zakres wykładnika dla zwykłych liczb w tej notacji to <-1022; 1023>. Liczby są normalizowane. Mantysa składa się z „1”, kropki binarnej i ułamka, który jest jawnie zapisany na 52 bitach. Zakres mantysy to <1; 2-2 -52>. Mantysa wypełniona „0” odpowiada liczbie dwójkowej i dziesiętnej „1”, natomiast mantysa wypełniona samymi „1” odpowiada liczbie dwójkowej 1.11111…1 (1 całkowite i 52 pozycje ułamkowe o wartości „1”), czyli dziesiętnie 2-2 -52. Zakres dziesiętny dodatnich liczb pojedynczej precyzji w przybliżeniu wynosi <10-38 ; 1038 >, natomiast liczb podwójnej precyzji <10-308 ; 10308 >.