Systemy liczenia i reprezentacja liczb

Transkrypt

Systemy liczenia i reprezentacja liczb
1
Systemy liczenia
• dwójkowy (binarny), ósemkowy, dziesiętny, szesnastkowy.
system
dwójkowy
cyfry
01
przykład
101
ósemkowy
01234567
270
dziesiętny
01234
56789
01234567
89ABCDEF
309
szesnastkowy
10A
dziesiętnie
1 ∗ 22 + 1 ∗ 20 =
1∗4+1=5
2 ∗ 82 + 7 ∗ 81 =
2 ∗ 64 + 7 ∗ 8 = 184
3 ∗ 102 + 9 ∗ 100 =
3 ∗ 100 + 9 = 309
1 ∗ 162 + 10 ∗ 160 =
1 ∗ 256 + 10 = 266
2
Komputer „myśli” dwójkowo – organizacja pamięci
• 1 bit – miejsce na zapamiętanie znaku 0 bądź 1
• 1 bajt = 8 bitów – pozwala zapamiętać 28 różnych wartości, a więc np. liczby
0-255
• 1 kB (kilobajt) = 210 B = 1024 B
• 1 MB (megabajt) = 220 B = 1048576 B
• 1 GB (gigabajt) = 230 B = 1073741824 B
• 1 słowo to ilość informacji przetwarzanej przez procesor w jednym cyklu
(procesor 32 bitowy = procesor o słowie 32 bitowym)
• bity i bajty bardziej i mniej znaczące
3
Binarna reprezentacja danych
• operacje bitowe
– przesunięcia:
00000001 << 3 = 00001000 = 8
00001101 >> 2 = 00000011 = 3
00001101 << 5 = 10100000 = 160
– operacje logiczne: koniunkcja &, alternatywa |, dysjunkcja ^, dopełnienie ~
01010101 & 11001100 = 01000100
01010101 | 11001100 = 11011101
00001101 ^ 11001100 = 11000001
~ 01010101 = 10101010
~ 11001100 = 00110011
• typowa liczba całkowita zajmuje jedno słowo
4
Reprezentacja liczb
• Reprezentacja stałopozycyjna
– w praktyce tylko dla liczb całkowitych
• Reprezentacja zmiennopozycyjna (zmiennoprzecinkowa)
– mantysa i cecha, liczba = mantysa ∗ 2cecha
18.5 = 0.185 ∗ 102 = 0.100101 ∗ 2101
– rozdzielczość i skończoność komputerowych liczb rzeczywistych
– typy 4-bajtowe (3 bajty mantysy i 1 bajt cechy), 6-bajtowe, 8-bajtowe
(podwójnej precyzji)
– należy być ostrożnym przy dodawaniu małej liczby zmiennoprzecinkowej
do dużej (mała może zniknąć)
– wartości, które nie są poprawnymi liczbami (NAN - not a number)
– standard IEEE 754 – dobry opis pod
http://research.microsoft.com/~hollasch/cgindex/coding/ieeefloat.html
5
Standard IEEE 754
Reprezentacja bitowa
precyzja
pojedyncza
podwójna
znak
1 [31]
1 [63]
wykładnik
8 [30-23]
11 [62-52]
część ułamkowa
23 [22-00]
52 [51-00]
przesunięcie
127
1023
• reprezentacja binarna – podstawa równa 2
• znak – 0 - liczba dodatnia, 1 - liczba ujemna
• wykładnik i przesunięcie – rzeczywista cecha = wykładnik - przesunięcie
• mantysa
– postać znormalizowana liczby – w mantysie przecinek po pierwszej
niezerowej cyfrze (1 6 m < 10)
Przykład: 1.25 ∗ 102 , nie 0.125 ∗ 103 ani 125 ∗ 100
– w systemie dwójkowym niezerowa znaczy jedynka
– pierwszy bit mantysy zawsze równy 1 – ukryty, reszta to część ułamkowa
6
Standard IEEE 754 – przykłady
23.75
• postać binarna: 10111.11 = 24 + 22 + 21 + 20 + 2−1 + 2−2
• po normalizacji: 1.011111 ∗ 24 = 1.011111 ∗ 2100
•
•
znak
0
wykładnik z przesunięciem 4 + 127 = 131 = 10000011
część ułamkowa
011111
ostatecznie mamy 0 10000011 01111100000000000000000
czyli 01000001 10111110 00000000 00000000
szesnastkowo 0x41BE0000
-0.7
• postać binarna: −0.1011001100110011...
• znak = 0, wykładnik = −1,
•
ostatecznie mamy
czyli
szesnastkowo
127 − 1 = 126 = 01111110
1 01111110 01100110011001100110011
10111111 00110011 00110011 00110011
0xBF333333
7
Standard IEEE 754 – c.d.
Wartości specjalne – wykładniki z samych jedynek bądź z samych zer
znak
0
0
0
0
0
0
1
1
1
1
1
1
wykładnik (w)
00..00
00..00
00..01 – 11..10
11..11
11..11
11..11
00..00
00..00
00..01 – 11..10
11..11
11..11
11..11
cz. ułamkowa (u)
00..00
00..01 – 11..11
00..00 – 11..11
00..00
00..01 – 01..11
10..00 – 11..11
00..00
00..01 – 11..11
00..00 – 11..11
00..00
00..01 – 01..11
10..00 – 11..11
wartość
+0
dodatnia zdenorm. 0.u ∗ 2−p+1
dodatnia znorm. 1.u ∗ 2w−p
+Infinity (nieskończoność)
SNaN (Signalling Not A Number)
QNaN (Quiet Not A Number)
-0
ujemna zdenorm. −0.u ∗ 2−p+1
ujemna znorm. −1.u ∗ 2w−p
-Infinity (nieskończoność)
SNaN
QNaN
8
Standard IEEE 754 – c.d.
Operacje specjalne:
Operacja
n / ±Infinity
±Infinity x ±Infinity
±nonzero / 0
Infinity + Infinity
Wynik
0
±Infinity
±Infinity
Infinity
Operacja
±0 / ±0
Infinity - Infinity
±Infinity / ±Infinity
±Infinity x 0
Wynik
NaN
NaN
NaN
NaN
Zakresy dwójkowo:
precyzja
pojedyncza
podwójna
zdenormalizowane
±2−149 . . . (1 − 2−23 ) ∗ 2−126
±2−1074 . . . (1 − 2−52 ) ∗ 2−1022
znormalizowane
±2−126 . . . (2 − 2−23 ) ∗ 2127
±2−1022 . . . (2 − 2−52 ) ∗ 21023
Zakresy dziesiętnie:
precyzja
pojedyncza
podwójna
dziesiętnie
± ∼ 10−44.85 . . . ∼ 1038.53
± ∼ 10−323.3 . . . ∼ 10308.3