Notacja zmiennopozycyjna. Błąd zaokrąglenia

advertisement
1
Podstawy arytmetyki
komputerowej
Paweł Perekietka
2
Spis treści
1. Reprezentacja liczb całkowitych
– Notacja uzupełnieniowa (kod U2)
– Błąd przepełnienia (nadmiaru)
– Notacja z przesunięciem
2. Notacja zmiennopozycyjna.
Reprezentacja liczb całkowitych
i niecałkowitych
– Notacja wykładnicza
– Gęstość (precyzja) reprezentacji
– Błędy zaokrąglenia
3
Reprezentacja liczb całkowitych
4
Reprezentacja liczb całkowitych. Kod U2
Najpopularniejszym systemem reprezentacji liczb
całkowitych w systemach informatycznych jest
notacja uzupełnieniowa do dwóch (kod U2).
W przypadku systemu 3-bitowego, wygląda tak:
011
010
001
000
111
110
101
100
3
2
1
0
-1
-2
-3
-4
Uwaga: Liczby 4 nie można reprezentować w systemie
3-bitowym.
5
Reprezentacja liczb całkowitych. Kod U2
W systemie uzupełnieniowym do dwóch, wartość lewego
skrajnego bitu decyduje o znaku liczby.
Dlatego mówi się o bicie znaku (ang. sign bit).
0111
0110
0101
0100
0011
0010
0001
7
6
5
4
3
2
1
1001
1010
1011
1100
1101
1110
1111
-7
-6
-5
-4
-3
-2
-1
Między reprezentacjami liczb przeciwnych istnieje zależność:
• są identyczne od prawej aż do pozycji pierwszej jedynki
• dalej są swoimi uzupełnieniami do dwóch, tzn. tworzą je takie
ciągi bitów, że jeden można otrzymać z drugiego przez zamianę
wszystkich 0 na 1 i 1 na 0.
Uwaga:
W systemie 4-bitowym nie zapiszemy liczby przeciwnej do -8 =10002.
6
Reprezentacja liczb całkowitych. Kod U2
Ćwiczenie:
Zapisz liczbę –13 w systemie 8-bitowym w notacji U2.
• 13 = 8 + 4 + 1, więc 13 = ?????????2
• co dalej?
00001101
11110011
7
Reprezentacja liczb całkowitych. Kod U2
Popularność notacji U2 wynika m.in. z faktu, że
operacje dodawania i odejmowania są w nim
wykonywane tak samo, jak dla liczb binarnych
bez znaku (naturalnego kodu binarnego).
Oto przykład dla systemu 8-bitowego:
57
+ (-13)
00111001
11110011
--------------------44
00101100
Uwaga:
Pojawiające się w czasie odejmowania przeniesienia poza bit znaku są
ignorowane.
8
Reprezentacja liczb całkowitych. Przepełnienie
Błąd przepełnienia (nadmiaru) (ang. overflow) pojawia
się wtedy, kiedy liczba, którą chcemy zakodować, nie
mieści się w zakresie reprezentowanych w kodzie
wartości.
Przykład:
W systemie 4-bitowym nie da się zapisać wartości 9.
Oznacza to, że nie możemy otrzymać poprawnego
wyniku dodawania 5 + 4 = 0101 + 0100.
Jak wykryć błąd przepełnienia?
Uwaga:
W praktyce powszechnie stosuje się systemy co najmniej 32-bitowe.
Umożliwia to zapamiętywanie bez przepełnienia wartości dodatnich
aż do 2 147 483 647..
9
Reprezentacja liczb całkowitych. Przepełnienie
Programiści (i świadomi użytkownicy komputerów)
powinni uświadamiać sobie, że dodawanie do siebie
wielu małych wartości da w wyniku dużą liczbę.
Przykład:
Dawniej powszechnie stosowano ciągi 16-bitowe.
Przepełnienie nie następowało zatem jedynie do
wartości 215 = 32 768.
19 września 1989 r., po latach niezawodnej pracy,
system komputerowy w pewnym szpitalu nagle
przestał działać.
Co okazało się przyczyną problemu?
Uwaga:
Awaria, podobna do wyżej opisanej, może powtórzyć się 19 stycznia 2038
roku i to na większą skalę. Dlaczego?
10
Notacja (kod) z przesunięciem
Inną metodą reprezentacji wartości całkowitych
jest notacja z przesunięciem.
Dla systemu 3-bitowego z przesunięciem 3, wygląda
tak:
111
110
101
100
011
010
001
000
4
3
2
1
0
-1
-2
-3
Uwaga:
Każdej długości reprezentacji odpowiada optymalna wartość
przesunięcia. Np. dla systemu 4-bitowego będzie to 7.
11
Notacja zmiennopozycyjna.
Reprezentacja liczb
całkowitych i niecałkowitych
12
Notacja zmiennopozycyjna
Reprezentacja liczb niecałkowitych (z częścią
ułamkową) wymaga sposobu na zapamiętanie
„kropki” oddzielającej część ułamkową od całkowitej.
Stosowana jest notacja zmiennopozycyjna,
wywodząca się z notacji naukowej (wykładniczej).
± B * 2A
Przykład dla precyzji 8-bitowej:
0 101 1011
• Najbardziej znaczący bit przeznacza się na bit znaku.
• Pozostałe bity dzieli się na dwie grupy, zwane polami:
– pole A wykładnika (ang. exponent field)
– pole B części ułamkowej mantysy (ang. mantissa field)
13
Notacja zmiennopozycyjna. Przykład
Przykład 1:
0 101 1011
• Bit znaku ma wartość 0.
• Wykładnik to 101.
• Część ułamkowa mantysy to 0,1011.
Wykładnik to liczba całkowita zapisana w notacji
z nadmiarem. W tym przypadku będzie to liczba 2.
Otrzymujemy liczbę, która w naturalnym kodzie
dwójkowym będzie równa 110,11
01011011 jest więc binarną reprezentacją liczby 6 3/4
14
Notacja zmiennopozycyjna. Przykład 2
Przykład 2:
Zapisać liczbę 1 1/16 w notacji zmiennopozycyjnej.
• Bit znaku będzie miał wartość 0.
• 1 1/16 = 1,0625 w naturalnym kodzie to 1,0001.
• Część ułamkowa mantysy to zatem 0,0001.
• Wykładnik to 0. W notacji z nadmiarem: 011.
Pełny bajt wygląda zatem następująco: 00110001.
Przykład 3:
Jak zapisać 0 (zero) w notacji zmiennopozycyjnej?
15
Notacja zmiennopozycyjna. Przykład
Zadanie:
Zapisać liczbę 2 5/8 w notacji zmiennopozycyjnej.
• Bit znaku będzie miał wartość 0.
• 2 5/8 w naturalnym kodzie to 10,101.
• Znormalizowana postać mantysy to 1,0101.
• Część ułamkowa mantysy to zatem 0,0101.
• Wykładnik to 1. W notacji z nadmiarem: 100.
Pełny bajt wygląda zatem następująco: 01000101.
16
Notacja zmiennopozycyjna. Gęstość liczb
Liczby reprezentowane w notacji zmiennopozycyjnej
nie są rozmieszczone równomiernie na osi liczbowej.
Przykład:
W formacie 8-bitowym można zapisać takie liczby
dziesiętne większe od 1:
•
•
•
•
•
1, 1,0625, 1,125, 1,1875, …, 1,9375
2, 2,125, 2,25, 2,375, …, 3,875
4, 4,25, 4,5, 4,75, …, 7,75
8, 8,5, 9, 9,5, …, 15,5
16, 17, 18, …, 31
17
Notacja zmiennopozycyjna. Gęstość liczb
Zadanie:
Jakie liczby dziesiętne dodatnie mniejsze od 1
można zapisać w formacie 8-bitowym?
• Najmniejsza w naturalnym kodzie dwójkowym ma
postać: 0,001. Dlaczego?
• Kolejna liczba, którą można dokładnie zapisać ma
postać: 0,0010001. Dlaczego?
• 0,125, 0,1328125, 0,140625, …, 0,2421875
• 0,25, 0,265625, 0,28125, …., 0,484375
• 0,5, 0,53125, 0,5625, …, 0,96875
• Czy liczba 0 ma swoją reprezentację?
18
Notacja zmiennopozycyjna. Błąd zaokrąglenia
Przykład:
Zapisz liczbę 2 5/16 (2,3125) w systemie 8-bitowym.
• Bit znaku będzie miał wartość 0.
• 2 5/16 w naturalnym kodzie to 10,0101.
• Znormalizowana postać mantysy to 1,00101.
• Część ułamkowa mantysy to zatem 0,00101.
W polu części ułamkowej zapiszemy tylko 0010!
• Wykładnik to 1. W notacji z nadmiarem: 100.
Otrzymamy 01000010, co jest reprezentacją … 2 1/4.
Zjawisko to nazywa się błędem zaokrąglenia.
19
Notacja zmiennopozycyjna. Błąd zaokrąglenia
Przykład:
Wykonać dodawanie: 4 1/2 + 1/8 + 1/8.
• Dodajemy od lewej do prawej:
– 4 ½ + 1/8 = 4 5/8 = 100,1012 ≈ 0 101 0010
= 4 ½
– 4 ½ + 1/8 = … = 4 ½
• Dodajemy od prawej do lewej:
– 1/8 + 1/8 = ¼ = 0,012 = 0 001 0000
– 4 ½ + ¼ = 4 3/4 = 100,112 = 0 101 0011
Wniosek:
Kolejność wykonywania działań jest istotna.
20
Notacja zmiennopozycyjna. Błąd zaokrąglenia
Źródłem błędów zaokrągleń jest również problem
nieskończonego binarnego rozwinięcia ułamka.
Np. 1/10 ma rozwinięcie: 0.000110011001100110011001100…
Rozmiar błędów zaokrągleń można zmniejszyć,
stosując dłuższe pole części ułamkowej
(format tzw. podwójnej precyzji).
Notacji zmiennoprzecinkowej nie stosuje się do
przechowywania informacji finansowych
i wykonywania na nich działań arytmetycznych…
21
22
Download