4W0
Reprezentacje danych cyfrowych i ich skutki
Stałoprzecinkowe reprezentacje binarne
Zmiennoprzecinkowe reprezentacje binarne
Zakres dynamiki, skutki skończonej długości słowa
4W1
System dziesiętny
)
10
8
10
5
10
4
10
2
10
1
(
8
5
,
4
2
1
2
1
0
1
2
)
2
(
)
1
(
)
0
(
)
1
(
)
2
(
= ± (100 + 20 + 4 + 0,5 + 0,08) = ± 124,58
Liczba rzeczywista (wymierna) zapisana w systemie dziesiętnym,
o wartości sto dwadzieścia cztery i pięćdziesiąt osiem setnych
1 2 4
nie znakowana
liczba całkowita - unsigned integer
1 2 4
zn
akowana liczba całkowita - signed integer
0 , 5 8
ułamek dziesiętny
- decimal fraction
124,58
– stałoprzecinkowa reprezentacja dziesiętna
12458
10
-2
– zmiennoprzecinkowa reprezentacja dziesiętna
System binarny
Podstawą systemu jest liczba 2.
Dwie cyfry binarne (bity
) 0 i 1, którym odpowiadają logiczne stany 0 i 1,
(BIT
–Binary digIT)
(7)(6)(5)(4)(3)(2)(1)(0)
0 1 1 1 1 1 0 0 b = 0
2
7
+ 1
2
6
+ 1
2
5
+ 1
2
4
+ 1
2
3
+ 1
2
2
+ 0
2
1
+ 0
2
0
=
= 64 + 32 + 16 + 8 + 4 = 124 d
8-
bitowa liczba binarna reprezentująca liczbę całkowitą 124
w notacji unsigned integer
Numer pozycji wagowej
Pun
kt dziesiętny
Notacja znak-
moduł
Numer pozycji wagowej
Punkt binarny
Notacja unsigned integer
Systemy liczbowe
4W2
n
bitów słowa binarnego
liczba możliwych wzorców bitowych, czyli
liczba reprezentowanych wartości
2
n
.
Ośmiobitowe słowo binarne może reprezentować różnych wartości
2
8
= 256
Zakres reprezentacji zależy od przyjętej notacji. Dla unsigned integer
od
0 0 0 0 0 0 0 0 b = 0
do
1 1 1 1 1 1 1 1 b = 2
8
-1 = 255
System heksadecymalny (szesnastkowy)
P
odstawą systemu jest liczba 16.
Liczba
D
0
1
2
3
4
5
6
7
8
9
10 11 12 13 14 15
Cyfra
H
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
(3) (2) (1) (0)
0 F 0 A 6 h = 15
16
3
+ 0
16
2
+ 10
16
1
+ 6
16
0
= 4096 + 10 + 6 = 5012 d
Przykładowa liczba heksadecymalna i jej wartość dziesiętna
(1) (0)
0x 7 C = 7
16
1
+ C
16
0
= 112 + 12 = 124 d
Reprezentacja heksadecymalna liczby całkowitej 124
Podstawowe reprezentacje binarne liczb:
stałoprzecinkowa (stałopozycyjna) (fixed point);
zmiennoprzecinkowa (zmiennopozycyjna) (floating point).
Stałoprzecinkowy format zapisu - położenie punktu dziesiętnego jest stałe
i jednoznaczne. Stała liczba pozycji zapisu reprezentuje część całkowitą i
część ułamkową.
Zmienne programowe typu Integer
mają format stałoprzecinkowy.
Zmiennoprzecinkowy format zapisu -
położenie punktu dziesiętnego jest
zmienne. Zmienna liczba pozycji zapisu reprezentuje część całkowitą i
część ułamkową.
Zmienne programowe typu Real Number
mają format zmiennoprzecinkowy.
Numer pozycji wagowej
4W3
Stałoprzecinkowa reprezentacja binarna liczby 124,58
16-
bitowa liczba binarna z częścią całkowitą i ułamkową, reprezentująca wartość dziesiętną 124,58
nr bitu w słowie
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
nr pozycji wagowej
7
6
5
4
3
2
1
0 .
-1
-2
-3
-4
-5
-6
-7
-8
wartość bitu
2
7
2
6
2
5
2
4
2
3
2
2
2
1
2
0
2
-1
2
-2
2
-3
2
-4
2
-5
2
-6
2
-7
2
-8
wartość dziesiętna bitu
128
64
32
16
8
4
2
1
0,5
0,25
0,12
5
0,06
25
0,03
12..
0,01
56..
0,00
78..
0,00
39..
liczba binarna
0
1
1
1
1
1
0
0
1
0
0
1
0
1
0
0
0 1111100 10010100 b = + (1
2
6
+ 1
2
5
+ 1
2
4
+1
2
3
+1
2
2
+1
2
-1
+1
2
-4
+1
2
-6
) =
= + (64 + 32 + 16 + 8 + 4 + 0,5 + 0,0625 + 0,015625) = + 124,578125 d
0 1111100 10010101 b = 124,578125 + 1
2
-8
= 124,578125 + 0,00390625 = 124,58203125 d
Liczba binarna zapisana w formacie Q8
, co oznacza że ułamek reprezentowany jest na ośmiu bitach.
Q
– Quantity of fractional bits – pojemność bitów ułamka
umowny punkt
binarny
bity cz. całkowitej
bity cz. ułamkowej
4W4
Stosowane notacje binarne
Notacja signed integer
Zapis typu
moduł-znak (sign and magnitude) liczb całkowitych.
Najstarszy bit liczby MSB (The Most Significant Bit
– MSB) jest bitem
znaku, pozostałe bity reprezentują wartość liczby
MSB=0 oznacza li
czbę dodatnią;
MSB=1 oznacza liczbę ujemną.
Liczba 124 w notacji signed magnitude wygl
ąda analogiczne jak w notacji
unsigned integer
(s)(6)(5)(4)(3)(2)(1)(0)
0 1 1 1 1 1 0 0 b = + (1
2
6
+ 1
2
5
+ 1
2
4
+ 1
2
3
+ 1
2
2
+ 0
2
1
+ 0
2
0
) =
= + (64 + 32 + 16 + 8 + 4) = + 124 d
8-
bitowa liczba binarna reprezentująca liczbę całkowitą +124
w notacji signed integer
Liczba (-
)124 reprezentowana jest następująco
(s)(6)(5)(4)(3)(2)(1)(0)
1 1 1 1 1 1 0 0 b = - (1
2
6
+ 1
2
5
+ 1
2
4
+ 1
2
3
+ 1
2
2
+ 0
2
1
+ 0
2
0
) =
= - (64 + 32 + 16 + 8 + 4) = -124 d
8-
bitowa liczba binarna reprezentująca liczbę całkowitą -124
w notacji signed integer
Największa i najmniejsza liczba reprezentowana przez 8-bitową liczbę
binarną w kodzie znak-moduł (signed integer)
0 111 1111 b = + (2
7
– 1) = + 127 d
1 111 1111 b = - (2
7
– 1) = - 127 d
numer pozycji wagowej
bit znaku
bit znaku
Siedem bitów do zapisu
wartości liczby
4W5
Dla porównania w przypadku zapisu unsigned integer
1111 1111 b = (2
8
– 1) = 255 d
0000 0000 b = 0 d
Reprezentowane zakresy przy 16-bitowej liczbie binarnej
od - (2
15
– 1) = - 32767 do (2
15
– 1) = + 32767
sign-magnitude
od 0 do (2
16
– 1) = 65535
unsigned integer
Notacja
uzupełnienie do dwóch (two’s complement)
MSB=0 liczba dodatnia
- zapis identyczny jak poprzednio
MSB=1 liczba ujemna
-
różnica w zapisie
(s7)(6)(5)(4)(3)(2)(1)(0)
1 1 1 1 1 1 1 0 b = -1
2
7
+ 1
2
6
+ 1
2
5
+ 1
2
4
+ 1
2
3
+ 1
2
2
+ 1
2
1
+ 0
2
0
=
= -128 + 64 + 32 + 16 + 8 + 4 + 2 = -2 d
8-
bitowa liczba binarna reprezentująca liczbę całkowitą -2
w notacji two’s complement
Konwersja liczby binarnej do kodu U2:
sign-magnitude
unsigned integer
zeruj bit znaku
odwróć wartość bitów
dodaj 1
liczba w kodzie U2
numer pozycji wagowej
bit znaku
4W6
Przykład konwersji liczby -124 do notacji uzupełnienie do dwóch
1 1 1 1 1 1 0 0
-124 w notacji znak-
moduł
1 0 0 0 0 0 1 1
po
zerowaniu bitu znaku i odwróceniu bitów
+ 1
1 0 0 0 0 1 0 0 b = -1
2
7
+ 1
2
2
= -128 + 4 = - 124 d
-
124 w notacji uzupełnienia do dwóch
8-
bitowa liczba binarna reprezentująca liczbę całkowitą -124
w notacji two’s complement
Warto
ść liczby w notacji unsigned integer
1 0 0 0 0 1 0 0 b = 1
2
7
+ 1
2
2
= 128 + 4 = 132 d = 256 - 124
uzupełnienie liczby 124, w notacji U2, do 2
n
.
Zakres reprezentacji dla 8-bitowe
go słowa binarnego w kodzie two’s
complement
0 111 1111 b = + (2
7
– 1)= + 127 d
1 000 0000 b = - 1
2
7
= - 128 d
Dla 16-
bitowego słowa
od: (- 1
2
15
) = - 32768 d
do: + (2
15
– 1)= + 32767 d
Notacja
przesunięcia binarnego (offset binary).
Notacja podobna do unsigned integer
, z tym, że wartości reprezentowane
p
rzez liczby binarne są przesunięte, co pozwala na przedstawianie liczb
dodatnich i ujemnych, bez stosowania bitu znaku.
Np. 8 bitów może reprezentować 256 wartości, od 0 do 255.
Jeśli przypiszemy 128-y wzór bitowy do wartości 0, to możemy
reprezentować wartości z zakresu od -127 do +128.
4W7
Zestawienie reprezentacji liczb w podstawowych notacjach binarnych,
na przykładzie
4-
bitowego słowa oraz zakres reprezentacji dla 16 bitów
Przydatność poszczególnych typów notacji w operacjach arytmetycznych
unsigned integer
nie przydatna, brak znaku liczby
signed integer
mało przydatna, utrudnia realizację operacji
(+) 0 0 0 0 0 0 1 1 3
(+) 0 0 0 0 0 0 1 1 3
(+) 0 0 0 0 0 0 1 0 + 2
(-) 1 0 0 0 0 0 1 0 - 2
(+) 0 0 0 0 0 1 0 1 = 5
(-) 1 0 0 0 0 1 0 1 = - 5
?
Dodawanie i odejmowanie liczb binarnych w kodzie znak-
moduł.
4W8
two’s complement
bardzo przydatna
, ułatwia realizację operacji
(+) 0 0 0 0 0 0 1 1 3
(-) 1 1 1 1 1 1 0 1 - 3
(-) 1 1 1 1 1 1 1 0 - 2
(-) 1 1 1 1 1 1 1 0 - 2
1 (+) 0 0 0 0 0 0 0 1 = 1
1 (-) 1 1 1 1 1 0 1 1 = - 5
Przykład dodawania dwóch liczb 8-bitowych w notacji U2
Uwaga!
Dodawanie i odejmowanie 8-bitowej liczby 15 i 4-bitowej liczby 3.
Przykład dodawania i odejmowania dwóch liczb o różnej długości, w notacji U2
B
łąd można wyeliminować poprzez operację rozszerzenia znakowego
liczby 4-b
itowej do 8 bitów
Poprawny wynik odejmowania po operacji rozszerzenia znakowego
przeniesienie pomijane
przeniesienie pomijane
L D
L B
+15
0 0
0
0
1
1 1
1
-3
1
1 0
1
= 28
?
0 0
0
1
1
1 0
0
L D
L B
+15
0 0 0 0 1 1 1 1
+3
0 0 1 1
= 18
0 0 0 1 0 0 1 0
L D
+15
-
0
0
0
0
1 1
1
1
-3
1
1
1
1
1 1
0
1
= +12 1 0
0
0
0
1 1
0
0
bit przeniesienia pomijany
4W9
S
tałoprzecinkowe reprezentacje binarne w systemach DSP
Najczęściej stosowane formaty (przy 16-bitowym słowie binarnym):
Q0
liczba binarna reprezentuje wartość całkowitą, czyli jest
binarną liczbą całkowitą;
Q15
liczba binarna reprezentuje ułamek, czyli jest ułamkiem
binarnym.
Format Q0 -
domyślne położenie punktu binarnego po prawej stronie
liczby, przed bitem 0.
Format Q15 -
domyślne położenie punktu binarnego po lewej stronie
liczby pomiędzy bitem B14 i B15. Bit B15 - znak liczby.
Wartość dziesiętna reprezentowana przez liczbę - W
d
W
d
=
całkowita wartość binarna
q
Współczynnik skalowania q dla formatów Q0 i Q15:
Q0
q = 1 ;
Q15
q =
15
15
1
2
2
1
2
1
n
Przykład 8-bitowego słowa binarnego w formacie Q0 i Q7, o takim samym
wzorcu bitowym, i reprezentowane liczby dziesiętne
(7)(6)(5)(4)(3)(2)(1)(0)
0 1 1 1 0 0 0 0 b = 1
2
6
+ 1
2
5
+ 1
2
4
= 64 + 32 + 16 = 112 d
(7) (6) (5) (4) (3) (2) (1) (0)
( 0)(-1)(-2)(-3)(-4)(-5)(-6)(-7)
0 1 1 1 0 0 0 0 b =
Wartość reprezentowana przez liczbę binarną w formacie Q0 i Q7
n -
ilość bitów słowa
binarnego
Q0
q = 1
Numer pozycji wagowej
Punkt binarny
Przesunięcie punktu binarnego
Numer pozycji wagowej w formacie Q0
Q7
q = 2
-7
Numer pozycji wagowej w formacie Q7
Punkt binarny
7
4
7
5
7
6
2
2
1
2
2
1
2
2
1
112
q
d
875
,
0
125
,
0
25
,
0
5
,
0
2
1
2
1
2
1
3
2
1
4W10
Format Q15
zakres dynamiczny procesora
różnica pomiędzy największą i najmniejszą liczbą jaką może
reprezentować.
Jeśli występuje ograniczenie zakresu dynamicznego, to operacje
arytmetyczn
e mogą powodować przepełnienie;
Przepełnienie występuje wtedy, gdy liczba uzyskana w wyniku operacji
arytmetycznej wymaga zbyt dużo bitów do reprezentacji jej wartości, w
stosunku do możliwości reprezentacyjnych w rejestrach sprzętowych.
Dla procesor
ów 16-bitowych zakres dynamiczny, przy zapisie liczb
w kodzie
uzupełnienia do dwóch, wynosi od -32768 do 32767;
Pojedyncze
mnożenie liczb całkowitych 200x300=60000 daje
przepełnienie;
S
ystemy DSP są wrażliwe na przepełnienia ze względu na ciągłe
wykonywani
e operacji mnożenia i dodawania;
K
onieczne jest stosowanie zabezpieczeń. Mogą one polegać na:
każdorazowym sprawdzaniu wystąpienia przepełnienia po
wykonaniu operacji arytmetycznej;
zapewnieniu odpowiedniego zakresu wejściowego i wyjściowego
liczb podczas operacji.
Jeśli ograniczy się zakres reprezentowanych liczb, przeskaluje
liczby wejściowe do zakresu +1 do -1, czyli wykonuje się operacje
na ułamkach, to mnożenie nie spowoduje nigdy przepełnienia;
O
peracja dodawania może powodować przepełnienia.
Współczynnik skalowania q liczby całkowitej w formacie Q15 na wartość
dziesiętną, inaczej rozdzielczość ułamka, jest równy
q
= 2
-15
= 30,518
10
-6
B15 znak
Bity B14 – B0
Liczba binarna w formacie Q15
Stosowana notacja
uzupełnienie do dwóch
punkt binarny
4W11
Sk
alowanie liczb według wzoru
liczba całkowita Q15 = ułamek dziesiętny
1/
q
=
ułamek dziesiętny
2
15
ułamek dziesiętny = liczba całkowita Q15
q
=
liczba całk. Q15
2
-15
Zakres dynamiczny procesora w formacie Q15
Lmax Q15 = 32767
wartość dziesiętna 0,999;
Lmin Q15 = -32768
wartość dziesiętna -1,000;
Przykład reprezentacji ułamków (+ 0,75) i (- 0,75) w formacie Q15.
liczba całkowita Q15 = 0,75
2
15
= 0,75
32768 = 24576 = 2
14
+ 2
13
Reprezentacja ułamka (+0,75) przez liczbę binarną w formacie Q15
(15)(14)(13)(12)..............(3)(2)(1)(0)
0 1 1 0 ............ 0 0 0 0 b = q
24576 = q
(2
14
+ 2
13
) = 2
-15
(2
14
+ 2
13
) =
= 2
-1
+ 2
-2
= 0,5 + 0,25 = 0,75 d
Reprezentacja ułamka (-0,75) wymaga przestawienia liczby (-24576)
w notacji
uzupełnienia do dwóch
(15)(14)(13)(12)..............(3)(2)(1)(0)
1 0 0 1 ............ 1 1 1 1
+ 1
1 0 1 0 ............ 0 0 0 0 b = q
(-24576) = q
(-2
15
+ 2
13
) =
= 2
-15
(-2
15
+ 2
13
) = -2
0
+ 2
-2
= -1 + 0,25 = -0,75 d
Podstawy operacji w formacie Q15
1. Utrzymanie liczb w zakresie od -1 do 1;
2. Utrzymanie tego samego formatu wszystkich liczb, tak aby
przecinek obu operandów występował w tym samym miejscu.
Wyk
onywanie działań arytmetycznych:
Skalowanie operandów do formatu Q15
Wykonanie operacji
Skalowanie powrotne
4W12
Przykład prowadzenia operacji w formacie Q15:
Dodawanie dwóch liczb
0,5 + 0,05 = 0,55
16384 + 1638 = 18022
18022/32768 = 0,55
Odejmowanie dwóch liczb
0,5 - 0,05 = 0,45
16384 + 1638 = 14746
14746/32768 = 0,45
Mnożenie
(0,5
0,45) + (0,5
0,45) 1
2
(0,5
0,45) =
(0,2
0,5
0,45)
10
2
Wykonanie mnożenia 2
0,5
0,45
0,5
0,45 = 0,225
16384
14746 = 241 582 080
241 582 080/32768 = 7373
0,225 + 0,225 = 0,45
7373 + 7373 = 14746
14746/32768 = 0,45
Podczas mnożenia dwóch skalowanych liczb ulega mnożeniu
również współczynnik skalowania.
Należy dwukrotnie wykonać skalowanie powrotne.
Mnożenie możemy zapisać symbolicznie
C = (A
2
15
)
(B
2
15
) = A
B
2
30
C = (A
Qx)
(B
Qy) = A
B
Q(x+y)
Wynik mnożenia nie jest w formacie Q15 ale Q30.
W
ynik jest zapisany na 32 bitach to znaczy, że przecinek jest
pomiędzy bitem 29 a 30.
Aby powrócić do formatu Q15 możemy:
1.
pomnożyć wynik przez 2
-15
, tzn. przesunąć w prawo o 15 bitów,
wówczas prawidłowy rezultat mnożenia mamy w dolnych 16
bitach wyniku;
2.
pomnożyć jeszcze przez 2
1
, uzyskując format Q31. W tym
przypadku prawidłowy rezultat jest umieszczony w górnych 16
bitach wyniku.
Dwa sposoby
ochrony przed
przepełnieniem
4W13
Zmiennoprzecinkowe reprezentacje binarne (floating point)
Podziału słowa binarnego na dwie części:
mantysę M (mantissa) i wykładnik E (exponent).
Wartość zmiennoprzecinkowej liczby dwójkowej V jest wyrażona poprzez
V = M
2
E
Standard IEE 754-1985
Liczba pojedynczej precyzji w standardzie IEE 745
Wartość zmiennoprzecinkowej liczby binarnej zapisanej w tym standardzie
V = (-1)
S
M
2
(E-127)
Bit znaku S=0 oznacza liczbę dodatnią,
S=1 oznacza liczbę ujemną.
Wykładnik jest w notacji przesunięcia binarnego (offset binary - 127).
Zakres wykładnika
E = 0
wykładnik = -127
E = 255
wykładnik = +128
Mantysa jest ułamkiem binarnym w reprezentacji znak-moduł (sign-magnitude),
przy czym bit znaku mantysy jest przesunięty na początek słowa binarnego.
Liczby zmiennopozycyjne są normalizowane
Przyjmuje się, że po lewej stronie przecinka binarnego występuje tylko jedna
cyfra niezerowa, czyli 1, którą pomija się w reprezentacji.
Pominięty bit mantysy nosi nazwę bitu ukrytego i reprezentuje wartość 2
0
= 1.
Wartość mantysy wynosi
M = 1 + b22
2
-1
+ b21
2
-2
+ b20
2
-3
+ b19
2
-4
+ ... + b0
2
-23
Wszystkie bity mantysy są równe 0, to przyjmuje ona wartość 1.
Wszystkie bity są równe 1, to przyjmuje ona wartość bliską 2
(1+(1-2
-23
)).
4W14
Przykład zmiennoprzecinkowych reprezentacji binarnych
Największa liczba jaka może być reprezentowana
(2 – 2
-23
)
2
128
=
6,8
10
38
Najmniejsza liczba reprezentowana
1,0
2
-127
=
5,9
10
-39
Standard IEE redukuje zakres reprezentowanych liczb i definiuje 3 specjalne
klasy liczb. Zakres reprezentacji wg standardu
od
1,2
10
-38
do
3,4
10
38
Specjalne klasy liczb:
1.
0 jest zdefiniowane jako wszystkie bity mantysy i wykładnika równe 0;
2.
jest zdefiniowane jako wszystkie bity mantysy równe 0,
wykładnika równe 1
3. grupa bardzo małych liczb nienormalizowanych pomiędzy
1,2
10
-38
i
1,4
10
-45
te małe liczby uzyskuje się przez odrzucenie wymagań, że pierwsza cyfra
w mantysie jest jedynką.
Te trzy specjalne klasy liczb, zwykle oznacza się jako NANs (Not A Numbers)
64-bitowa liczba podwójnej precyzji w standardzie IEE745:
bity 0 do 51 - mantysa, bity 52 do 62 exponent, bit 63 to znak.
Rzeczywisty zakres reprezentowanych liczb podwójnej precyzji określony w
standardzie
od
2,2
10
-308
do
1,8
10
308
+ 1,75
2
(7-127)
= + 1,316554
10
-36
- 1,375
2
(129-127)
= - 5,500000