Wersja do druku

Transkrypt

Wersja do druku
Podstawy Informatyki
Jednostki informacji
Bit (ang. bit) (Shannon, 1948) Najmniejsza ilość informacji
potrzebna do określenia, który z dwóch równie
prawdopodobnych stanów przyjął układ.
Jednostka informacji (1b).
Bajt (ang. byte) (Shannon, 1948) Najmniejsza adresowalna
jednostka informacji pamięci komputerowej, składająca się z
bitów.
Wykład 2
Reprezentacja liczb w komputerze
Zazwyczaj przyjmuje się, że 1B = 8b (oktet), ale nie jest to
reguła!
Najbardziej znaczący bit (bajt) - bit (bajt) o największej wadze
(w zapisie z lewej strony).
Najmniej znaczący bit (bajt) - bit (bajt) o najmniejszej wadze
(w zapisie z prawej strony).
Sposoby zapisu danych w pamięci
Prefiksy SI
Nazwa
(symbol)
Standard SI
dziesiętny dwójkowy Różnica,
%
kilobit (kb)
103
210
2.4
megabit (Mb)
106
220
4.86
gigabit (Gb)
109
230
7.37
terabit (Tb)
1012
240
9.95
petabit (Pb)
1015
250
12.59
exabit (Eb)
1018
260
15.29
zettabit (Zb)
1021
270
18.06
yottabit (Yb)
1024
280
20.89
Prefiksy
binarne
Nazwa
(symbol)
•Pamięć w komputerach adresowana jest (najczęściej)
liniowo.
•Jak zapisać wielobajtowe dane pod danym adresem?
kibibit (Kibit)
mebibit (Mibit)
gibibit (Gibit)
tebibit (Tibit)
pebibit (Pibit)
exbibit (Eibit)
zebibit (Zibit)
yobibit (Yibit)
•W jakiej kolejności przesyłać kolejne bajty?
4A3B2C1D(h)
Systemy pozycyjne
Big-endian
•dwójkowy,
Najbardziej znaczący bajt jest umieszczany jako pierwszy.
99
100
101
102
103
104
...
4A
3B
2C
1D
...
np. procesory: SPARC, Motorola 68000, PowerPC.
•ósemkowy,
•dziesiętny (Indie → Arabowie → Europa),
•dwunastkowy (Babilonia, Rzym, średnowieczna Europa,
W.Brytania, USA – szyling=12 pensów, stopa=12cali, cal=12
linii, linia =12 punktów),
•szesnastkowy,
Little-endian
Najmniej znaczący bajt jest umieszczany jako pierwszy.
99
100
101
102
103
104
...
1D
2C
3B
4A
...
np. procesory: Intel x86, AMD64.
•phi-base system (wsp. złotego podziału jako podstawa).
Systemy pozycyjne
W pozycyjnych systemach liczbowych ten sam symbol
(cyfra) ma różną wartość w zależności od pozycji, którą
zajmuje w zapisie danej liczby.
Systemy pozycyjne – zapis liczby ułamkowej
n −1
.
∑c p
i
i
i=0
i
i
i=− m
4
x = c4 c3 c 2 c1c0 =
∑c p
x = cn −1 ... c2 c1c0 c −1c − 2 ... c − m =
•Część ułamkowa liczby — m pozycji.
•Część całkowita liczby — n pozycji.
p — podstawa systemu pozycyjnego.
Do zapisu liczby służą cyfry ci (których jest p) ustawiane na
kolejnych pozycjach.Pozycje numerujemy od 0 zaczynając
od strony prawej zapisu.
•Wartość liczby obliczamy sumując iloczyny cyfr przez
wagi ich pozycji.
Każda pozycja posiada swoją wagę równą pi .
Wartość liczby obliczamy sumująć iloczyny cyfr przez wagi
ich pozycji.
System dwójkowy (binarny)
System dziesiętny
Gottfried Leibnitz, XVIIw.
Cyfry: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
Cyfry: 0, 1.
Przykład:
Przykład:
55.8125 = 5*101+5*100+8*10-1+1*10-2+2*10-3+5*10-4
110111.11012 = 1*25 + 1*24 + 0*23 + 1*22 + 1*21 + 1*20 .
+ 1*2-1 + 1*2-2 + 0*2-3 + 1*2-4
•System ten jest wygodny dla człowieka, ale nie dla
maszyny.
•System ten jest wygodny maszyny.
•Reprezentacja cyfry dziesiętnej cyfra zajmuje cztery bity
pamięci komputera.
•n-cyfrowa liczba binarna bez znaku zajmuje n bitów w
•W ten sposób marnujemy pamięć — niektóre kombinacje
(np. 1111) są niewykorzystane.
Konwersja kodu dziesiętnego na dwójkowy
55.8125
Część ułamkową liczby
Część całkowitą liczby
dzielimy sukcesywnie przez mnożymy sukcesywnie przez 2 i
bierzemy część całkowitą
2 i bierzemy reszty
•Reprezentacja cyfry binarnej zajmuje dokładnie jeden bit.
pamięci komputera.
Konwersja kodu dziesiętnego na dwójkowy
Nie każdy ułamek skończony w systemie dziesiętnym jest
ułamkiem skończonym w systemie dwójkowym!
0.1(10)=?
1
0 2
55
27
1
1
8125
1 625
0 4
13
6
3
1
1
0
1
1
1 25
0 5
1 0
1 6
55(10)=110111(2)
0 8
1 2
0 4
0 8
0.8125(10)=0.1101(2)
55.8125(10)=110111.1101(2)
0.1(10)=0.000110011...(2)=
0.0(0011)
1 6
1 2
... ...
System szesnastkowy
•Cyfry: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.
•System łaczy zalety systemu binarnego (dobre wykorzystanie pamięci)
oraz dziesiątkowego (zwięzłość).
•Reprezentacja cyfry szesnastkowej zajmuje 4 bity:
Cyfra
(10)
(2)
Cyfra
(10)
(2)
Reprezentacja liczb całkowitych
Założenie: liczba całkowita ze znakiem jest zapisywana w
słowach n-bitowych. (Dla przykładu weźmy n = 8).
00110111
0
0 0
8
8 1000
1
1 1
9
9 1001
2
2 10
A
10 1010
moduł liczby (7 bitów).
znak (najbardziej znaczący bit)
3
3 11
B
11 1011
Liczba nieujemna
4
4 100
C
12 1100
jest kodowana jako: znak 0 i kod binarny modułu tej liczby.
5
5 101
D
13 1101
np. liczba 55 w przykładzie powyżej.
6
7
6 110
7 111
E
F
14 1110
15 1111
Przykład: 37.D = 3*161 + 7*160 + D*16-1
Liczba ujemna
Kod uzupełnień do 1 (U1)
jest kodowana jako: znak 1 i kod binarny modułu tej liczby.
Liczba ujemna x (analogicznie przeciwna) jest kodowana na
jeden z dwóch (równoważnych) sposobów:
Liczba -55
10110111
negujemy (bitowo) kod binarny modułu x
bo 0110111(2) =55(10) =|-55|
albo bierzemy kod binarny liczby 2n -1 +x.
+ Sposób wygodny dla człowieka.
– Przy operacjach arytmetycznych trzeba porównać znaki.
– Reprezentacja liczby 0: 00000000 oraz 10000000
(redundancja).
Zakres liczb: [-2n-1 + 1, 2n-1 - 1] (2n - 1 liczb).
Sposób 2: liczba -55
Sposób 1: liczba -55
1) Kod binarny modułu (=55):
1) Kod binarny liczby
00110111
28 -1 -55 =256 -56 =200:
2) Negacja bitowa:
11001000
11001000
– Sposób mało wygodny dla człowieka.
+ Łatwe operacje arytmetyczne.
– Reprezentacja liczby 0: 00000000 oraz 11111111.
Zakres liczb: [-2n-1 + 1, 2n-1 - 1] (2n - 1 liczb).
Zasady dodawania
Zasady dodawania
1 Liczby zapisane w kodzie U1 dodajemy zgodnie z zasadami
dodawania dwójkowego, ale
1 Liczby zapisane w kodzie U1 dodajemy zgodnie z zasadami
dodawania dwójkowego, ale
2 jeżeli wystąpi przeniesienie poza bit znaku, to do wyniku
2 jeżeli wystąpi przeniesienie poza bit znaku, to do wyniku
należy dodać 1.
należy dodać 1.
Z przeniesieniem
Bez przeniesienia
1111
0 1 0 0 1 1 0 1 (77)
+ 0 0 1 0 1 0 1 1 (43)
0 1 1 1 1 0 0 0 (120)
1
1
1 0 1 1 0 0 1 0 (-77)
+ 0 0 1 0 1 0 1 1 (43)
1 1 0 1 1 1 0 1 (-34)
11
111
0 1 0 0 1 1 0 1 (77)
+ 1 1 0 1 0 1 0 0 (-43)
1111
1 0 1 1 0 0 1 0 (-77)
+ 1 1 0 1 0 1 0 0 (-43)
00100001
10000110
+00000001
+00000001
0 0 1 0 0 0 1 0 (34)
1 0 0 0 0 1 1 1 (-120)
Kod uzupełnień do 2 (U2)
Liczba ujemna x (analogicznie przeciwna) jest kodowana na
jeden z dwóch (równoważnych) sposobów:
•negujemy (bitowo) kod binarny modułu x i dodajemy 1;
•bierzemy kod binarny liczby 2n +x.
Sposób 1: liczba -55
Sposób 2: liczba -55
1) Kod binarny modułu (=55):
00110111
1) Kod binarny liczby
2) Negacja bitowa:
28 -55 =256 -55 =201:
11001000
3) Dodanie 1:
11001001
11001001
– Sposób mało wygodny dla człowieka.
+ Łatwe operacje arytmetyczne.
– Jedna reprezentacja liczby 0: 00000000
Zakres liczb: [-2n-1 , 2n-1 -1] (2n liczb).
Nadmiar (integer overflow)
•Nadmiar występuje wtedy, gdy wynik działania nie mieści
się w dopuszczalnym zakresie liczb, które mogą być
zapisane w danej reprezentacji.
•Nadmiar występuje tylko przypadku dodawania liczb tego
samego znaku.
Założenie: reprezentacja 4-bitowa bez znaku.
Dodawanie w kodzie U2
Dodawanie w kodzie U2 odbywa się zgodnie z zasadami
dodawania dwójkowego
1
11
11
1 0 1 1 0 0 1 1 (-77)
111
+ 0 0 1 0 1 0 1 1 (43)
+ 1 1 0 1 0 1 0 1 (-43)
1 1 0 1 1 1 1 0 (-34)
0 0 1 0 0 0 1 0 (34)
1111
111
1 0 1 1 0 0 1 1 (-77)
+ 1 1 0 1 0 1 0 1 (-43)
1 0 0 0 1 0 0 0 (-120)
Liczby ułamkowe stałoprzecinkowe
Liczba stałopozycyjna (n +m)-bitowa
00110111
posiada n bitów przeznaczonych na część całkowitą oraz
m bitów przeznaczonych na kodowanie części ułamkowej.
Liczba 9 +11 = 20
1
n −1
cn −1...c3c2c1c0 .c−1c−2 ...c−m =
11
1 0 0 1 (9)
1 0 1 1 (11)
1 0 1 0 0 (4)
bit nadmiaru ustawiony na 1,
przeniesienie.
1
0 1 0 0 1 1 0 1 (77)
∑c p
i
i
i =− m
Założenie: liczba bez znaku.
Wartość największa:
2n-1 + 1 – 2-m = 2n – 2-m
Wartość najmniejsza:
0+ 2-m = 2-m
Liczby ułamkowe stałoprzecinkowe
•Rozkład reprezentowanych wartości: równomierny.
Liczby zmiennoprzecinkowe — przykłady
•Błąd zaokrągleń/obcięcia (rounding error, cancellation error) =
moduł róznicy pomiędzy wartością dokładną liczby a wartością
jej reprezentacji.
W wielu zagadnieniach zapis dużych lub bardzo małych liczb
w normalnej notacji pozycyjnej jest niewygodny, gdyż
wymaga sporej ilości cyfr.
błąd bezwzględny δe < 2-m
Dlatego liczby takie zapisuje się w bardziej wygodny sposób:
Reprezentacja liczby 0.1 za pomocą pięciu bitów ułamkowych
me = 9.109 x 10-31 kg
0.110 ≅0.000112 =3/32 =0.0937510
G = 6.67 x 10-11m3kg-1s-2
δe =|0.1-0.09375|=0.00625 =1/160 (błąd bezwzględny)
NA = 6.022 x 1023mol-1
δe /0.1 =0.0625 =6:25%(błąd względny)
Liczby zmiennoprzecinkowe (floating-point
numbers)
Liczba zmiennoprzecinkowa
x =(-1)s · m · pc
s — znak liczby,
Normalizacja liczby zmiennoprzecinkowej
Położenie przecinka w liczbie zmiennoprzecinkowej nie jest
ustalone.
273.16 = 2.7316 x 102 = 0.27316 x 103 = 27316 x 10-2
Znormalizowana liczba zmiennoprzecinkowa
to taka liczba, której mantysa spełnia zależność:
m — mantysa,
p — podstawa systemu,
c — cecha.
1≤ |m|<p
W systemie dwójkowym znormalizowana liczba
zmiennoprzecinkowa ma zawsze część całkowitą równą ±1.
me = 9.109 x 10-31 kg
G = 6.67 x 10-11 m3kg-1s-2
NA = 6.022 x 1023 mol-1
Zatem, do zakodowania liczby zmiennoprzecinkowej
potrzeba zakodować (przyjmujemy, ze podstawa będzie
równa 2):
•znak,
•mantysę,
•cechę.
Precyzja liczb zmiennoprzecinkowych
Założenia:
mantysa: 3 bity, bez znaku, liczba stałoprzecinkowa,
przecinek po pierwszym bicie,
cecha: 3 bity bez znaku,
x.xx ·2xxx
Możliwe wartości:
0.00 0.01 0.10 0.11 1.00 1.01 1.10 1.11
000
001
010
011
100
101
110
111
0
0
0
0
0
0
0
0
0.25
0.5
1
2
4
8
16
32
0.5 0.75 1
1.25 1.5 1.75
1
1.5 2
2.5
3 3.5
2
3
4
5
6
7
4
6
8
10
12 14
8
12 16
20
24 28
16 24 32
40
48 56
32 48 64
80
96 112
64 96 128 160 192 224
Brak wielu liczb! (np. 9, 11, 13, 15, . . . )
Standard IEEE 754
Precyzja liczb zmiennoprzecinkowych
Próba zakodowania liczby 9
9 =9 · 20 = 4.5 · 21 =2.25 · 22 =1.125 · 23 =(1.001 · 2011)2
Ale mamy do dyspozycji tylko format:
x:xx · 2xxx
A zatem mantysa 1.001 zostanie obcięta do 1.00 i w ten
sposób dostaniemy liczbę: (1.00 · 2011)2 =810
Mamy tu do czynienia z błędem zaokrąglenia.
Wniosek: liczba 9 wymaga większej precyzji.
W celu ujednolicenia reprezentacji binarnej oraz operacji
numerycznych na różnych platformach sprzętowych,
wprowadzono standard zapisu zmiennoprzecinkowego
IEEE 754 (William Kahan).
Standard ten definiuje:
•formaty reprezentacji liczb zmiennoprzecinkowych:
single-precision (32 bity),
double-precision (64bity),
single-extended precision (≥ 43 bitów)
double-extended precision (≥ 79 bitów, zazwyczaj 80 bitów),
•wartosci specjalne (np. nieskończoność, NaN),
•zmiennoprzecinkowe operacje,
•modele zaokrąglania,
•wyjątki.
Ogólny format w standardzie IEEE 754
Liczby pojedynczej precyzji
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
31
sign(bit znaku): 0 — liczba dodatnia, 1 — liczba ujemna,
exponent (cecha): kod z nadmiarem (BIAS = 2e-1 - 1),
fraction (mantysa): liczba stałoprzecinkowa, kod U1,
pozbawiona najbardziej znaczącego bitu reprezentującego
część całkowitą — bit ten nie jest przechowywany.
Typ
zera
liczby nieznormalizowane
liczby znormalizowane
nieskończoności
NaN (nieokreślone)
Cecha
0
0
od 1 do 2e-1
2e-1
2e-1
•bit znaku: 0 — liczba dodatnia, 1 — liczba ujemna,
•cecha: (BIAS =127), zakres: -126 ÷127,
•mantysa: m =1.fraction
•Znormalizowane liczby o najmniejszym module:
Mantysa
0
≠0
dowolna
0
≠0
±2-126 ≈±1.175494351 ·10-38
•Liczby o największym module:
±((1 - (1/2)24)2128)≈± 3.4028235 ·1038
Liczby podwójnej precyzji
63
52
•bit znaku: 0 — liczba dodatnia, 1 — liczba ujemna,
•cecha: (BIAS =1023), zakres: -1022 ÷1023,
•mantysa: m =1.fraction
•Znormalizowane liczby o najmniejszym module:
±2-1022 ≈±2.2250738585072020 ·10-308
•Liczby o największym module:
±(1+ (1 – 2-52)))21023≈± 1.7976931348623157 ·10308
23
0
0