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 >.