Stałoprzecinkowy zapis liczb wymiernych

advertisement
Wprowadzenie do informatyki - ć wiczenia
Stałoprzecinkowy zapis
liczb wymiernych
dr inż . Izabela Szczęch
WSNHiD
Ćwiczenia z wprowadzenia do informatyki
Reprezentacja liczb wymiernych
§ Stałoprzecinkowa
§ bez znaku
§ ze znakiem
§ Zmiennoprzecinkowa
§ pojedynczej precyzji
§ podwó jnej precyzji
§ rozszerzonej precyzji
Izabela Szczęch
1
Wprowadzenie do informatyki - ć wiczenia
Plan zaję ć
n
Zapis stałoprzecinkowy bez znaku - definicja i konwersje
n
Zapis stałoprzecinkowy ze znakiem - definicja i konwersje
n
Zakresy liczb w reprezentacji stałoprzecinkowej
n
Dokładnoś ć reprezentacji stałoprzecinkowej
n
Arytmetyka w reprezentacji stałoprzecinkowej
3
Zapis stałoprzecinkowy
§ Podejś cie stałoprzecinkowe – zakłada okreś lenie ile bitó w
tworzy częś ć całkowitą liczby, a ile częś ć ułamkową.
Przecinek jest zatem umieszczany w stałym dla danego
formatu miejscu.
§ Dla liczb całkowitych w zapisie binarnym otrzymujemy
zawsze dokładne wartoś ci
§ Kodowanie liczb niecałkowitych w ogó lnoś ci obarczone
jest błędem
§ Rozró ż niamy dwa zapisy stałoprzecinkowe:
§ bez znaku
§ ze znakiem
4
Izabela Szczęch
2
Wprowadzenie do informatyki - ć wiczenia
Zapis stałoprzecinkowy
bez znaku
- definicja i konwersja
Dziesię tny zapis stałoprzecinkowy
bez znaku
§ Zapis pozycyjny moż na w prosty sposó b rozszerzyć na
liczby ułamkowe wprowadzając pozycje o wagach
ułamkowych.
Wagi pozycji
103
102
101
Cyfry zapisu
3
5
7
100
Częś ć
całkowita
10-1
9 , 8
10-2
10-3
10-4
10-5
2
9
1
4
Częś ć
ułamkowa
6
Izabela Szczęch
3
Wprowadzenie do informatyki - ć wiczenia
Binarny zapis stałoprzecinkowy
bez znaku
Wagi pozycji
23
22
21
20
2-1
2-2
2-3
2-4
2-5
Cyfry zapisu
1
0
1
0 , 1
1
0
0
1
Częś ć
całkowita
Częś ć
ułamkowa
1010,11001 (2) = 23 + 21 + 2-1 + 2-2 + 2-5
= 8 + 2 + 1/2 + 1/4 + 1/32
= 10 25/32
7
Zapis stałoprzecinkowy
bez znaku (bz
(bz))
§ Liczba wymierna L zapisana w systemie pozycyjnym o
podstawie P w postaci ciągu cyfr
cn-1… c1c0 c-1… c-m (P)
ma wartoś ć liczbową
w = cn-1Pn-1 + cn-2Pn-2 + … + c1P1 + c0 + c-1P-1 + … + c-mP-m
gdzie
c - cyfra dwó jkowa 0 lub 1,
n - liczba bitó w częś ci całkowitej liczby
m - liczba bitó w częś ci ułamkowej liczby
§ Przykład
1010,11001(2) = 23 + 21 + 2-1 + 2-2 + 2-5 = 8 + 2 + 1/2 + 1/4 + 1/16 = 10 13/16
8
Izabela Szczęch
4
Wprowadzenie do informatyki - ć wiczenia
Konwersja zapisu stałoprzecinkowego
bez znaku na system dziesię tny
SPOSÓ B 1:
Obliczamy z definicji wartoś ć liczby w zapisie stałoprzecinkowym sumując iloczyny wag pozycji razy podstawa
systemu.
Należ y pamiętać , ż e wagi częś ci ułamkowej są ujemne.
Obliczyć wartoś ć dziesiętną liczby stałoprzecinkowej
(bez znaku) 110100,111011(2).
110100,111011 (2) = 25+24+22+2-1+2-2+2-3+2-5+26
=32+16+4+ 1/2+1/4+1/8 +1/32+1/64
=52 + 32/64 + 16/64 + 8/64 + 2/64 + 1/64
= 52 59/64 (10)
9
Konwersja zapisu stałoprzecinkowego
bez znaku na system dziesię tny
SPOSÓ B 2:
Wartoś ć częś ci całkowitej obliczamy jak poprzednio.
Częś ć ułamkową traktujemy chwilowo jak liczbę całkowitą,
obliczamy jej wartoś ć i wynik mnoż ymy przez wagę ostatniej
pozycji liczby wejś ciowej:
Obliczyć wartoś ć dziesiętną liczby stałoprzecinkowej bez znaku
110100,111011(2).
Częś ć całkowita ma wartoś ć 52(10).
Wyznaczamy wartoś ć częś ci ułamkowej:
111011(2) = 25+24+23+21+20 = 32 + 16 + 8 + 2 + 1 = 59
Waga ostatniej pozycji wynosi 2-6 = 1/64, zatem 0,111011(2) = 59*1/64 = 59/64
Łączymy częś ć całkowitą z częś cią ułamkową i otrzymujemy:
110100,111011(2) = 52 59/64 (10)
Izabela Szczęch
10
5
Wprowadzenie do informatyki - ć wiczenia
Konwersja zapisu stałoprzecinkowego
bez znaku na system dziesię tny
SPOSÓ B 3:
Traktujemy częś ć całkowitą i częś ć ułamkową jak jedną liczbę
całkowitą. Za pomocą schematu Hornera wyznaczamy wartoś ć
tej liczby, a wynik mnoż ymy przez wagę ostatniej pozycji liczby
wejś ciowej.
11
Algorytm Horner’
a obliczania wartości
dziesię tnej liczby stałoprzecinkowej
n
m
P
w
- liczba cyfr w częś ci całkowitej
- liczba cyfr w częś ci ułamkowej
- podstawa systemu pozycyjnego, w któ rym jest
zapisana liczba
- cyfra stojąca na i-tej pozycji. Pozycja o numerze 0 jest
pierwszą pozycją od strony prawej.
- obliczana wartoś ć liczby
1.
2.
3.
4.
5.
6.
w← 0
i← n-1
w ← ci + w x P
jeś li i = -m, to w ← w x P-m i kończymy
i← i-1
wró ć do punktu 3
ci
Izabela Szczęch
12
6
Wprowadzenie do informatyki - ć wiczenia
Algorytm Horner’
a obliczania wartości
dziesię tnej liczby stałoprzecinkowej
Obliczyć przy pomocy algorytmu Hornera wartoś ć dziesiętną
binarnej (czyli P=2) liczby stałoprzecinkowej bez znaku 110100,111011(2).
w← 0
w ← 1 + 0*2 =1
w ← 1 + 1*2 = 3
w ← 0 + 3*2 = 6
w ← 1 + 6*2 = 13
w ← 0 + 13*2 = 26
w ← 0 + 26*2 = 52 częś ć całkowita obliczona, kontynuujemy z częś cią ułamkową
-------------------------------------------------w ← 1 + 52*2 = 105
w ← 1 + 105*2 = 211
w ← 1 + 211*2= 423
w ← 0 + 423*2 = 846
w ← 1 + 846*2 = 1693
w ← 1 + 1693 *2 = 3387 koniec częś ci ułamkowej
w ← 3387 * 2-6 = 3387* 1/64 = 52,921875 = 52 59/64 (10))
13
Konwersja zapisu stałoprzecinkowego
bez znaku na system dziesię tny
Zadania:
Dowolnym sposobem oblicz wartoś ć dziesiętną następujących
liczb stałoprzecinkowych bez znaku:
a)
b)
c)
d)
110,0011(2)
213,132(4)
21,11(3)
75,402(8)
14
Izabela Szczęch
7
Wprowadzenie do informatyki - ć wiczenia
Konwersja z systemu dziesię tnego
Załó ż my, ż e chcemy znaleź ć zapis liczby dziesiętnej w systemie
o podstawie r z dokładnoś cią do m pozycji ułamkowych.
SPOSÓ B 1:
§ Liczbę rozdzielamy na częś ć całkowitą oraz częś ć ułamkową.
§ Częś ć całkowitą przeliczamy na system o podstawie r.
§ Częś ć ułamkową przeliczamy wg następujących krokó w:
Dopó ki nie otrzymamy w wyniku zera lub nie wyznaczymy
zadanej iloś ci cyfr ułamkowych
§ częś ć ułamkową mnoż ymy przez r,
§ częś ć całkowita wyniku mnoż enia jest kolejną cyfrą
zapisu stałoprzecinkowego w systemie o podstawie r
§ do następnego mnoż enia bierzemy jedynie częś ć
ułamkową wyniku.
15
Konwersja z systemu dziesię tnego
Przykład: Przeliczyć na system dwó jkowy bez znaku liczbę dziesiętną 2,21(10)
z dokładnoś cią do 4 miejsc po przecinku.
Wyznaczamy częś ć całkowitą liczby 2(10) = 10(2).
Wyznaczamy cyfry częś ci ułamkowej 0,21(10)
0,21 x 2 = 0,42 - cyfra 0
0,42 x 2 = 0,84 - cyfra 0
0,84 x 2 = 1,68 - cyfra 1
0,68 x 2 = 1,36 - cyfra 1 - koniec, mamy 4 cyfry ułamkowe
Uwaga:
pierwsza wyznaczona cyfra częś ci ułamkowej to bit najbliż szy przecinkowi.
Po osiągnięciu 4 cyfr, częś ć ułamkowa wciąż jest ≠ 0, tzn. otrzymane rozw. jest
przybliż one (z dokładnoś cią do 4 cyfr ułamkowych, czyli błąd < 2-4).
2,21(10) =10,0011(2)
10,0011(2) =21+2-3+2-4 = 2+1/8+1/16 = 23/16 = 2,1875(10) ≠ 2,21(10)
Izabela Szczęch
16
8
Wprowadzenie do informatyki - ć wiczenia
Konwersja z systemu dziesię tnego
Załó ż my, ż e chcemy znaleź ć zapis liczby dziesiętnej w systemie
o podstawie r z dokładnoś cią do m pozycji ułamkowych.
SPOSÓ B 2:
§ W tym celu liczbę dziesiętną mnoż ymy przez rm, bierzemy
częś ć całkowitą wyniku i przeliczamy ją na zapis w systemie o
podstawie r.
§ Następnie za pomocą przecinka oddzielamy od końca zapisu
m pozycji i otrzymujemy zapis liczby dziesiętnej w wyjś ciowym
systemie o podstawie r z zadaną dokładnoś cią.
Uwaga: oddzielenie za pomocą przecinka m ostatnich bitó w odpowiada
podzieleniu liczby przez rm, czyli to co najpierw pomnoż yliś my teraz dzielimy
i dlatego wynik jest poprawny
17
Konwersja z systemu dziesię tnego
Przykład 1: Przeliczyć na system dwó jkowy bez znaku liczbę 2,21(10) z
dokładnoś cią do 4 bitó w ułamkowych.
Liczbę mnoż ymy przez 24 = 16, zaokrąglamy w dó ł do wartoś ci
całkowitej i przeliczamy na system dwó jkowy:
ë2,21 x 16 û = ë35,36û = 35
35 div 2 = 17 i reszta 1
17 div 2 = 8 i reszta 1
8 div 2 = 4 i reszta 0
4 div 2 = 2 i reszta 0
2 div 2 = 1 i reszta 0
1 div 2 = 0 i reszta 1, koniec
35(10) = 100011(2)
Rozdzielamy przecinkiem 4 cyfry końcowe i otrzymujemy ostatecznie:
2,21(10) = 10,0011(2) (jest to oczywiś cie wartoś ć przybliż ona, błąd <2-4)
18
Izabela Szczęch
9
Wprowadzenie do informatyki - ć wiczenia
Konwersja z systemu dziesię tnego
Przykład 2: Przeliczyć na system tró jkowy bez znaku liczbę 12 8/9 (10)
z dokładnoś cią do 2 bitó w ułamkowych.
Liczbę 12 8/9 (10) mnoż ymy przez 32 = 9, zaokrąglamy w dó ł do wartoś ci
całkowitej i przeliczamy na system dwó jkowy:
12 8/9 x 9 = 116
w←
w←
w←
w←
w←
116 div 3 = 38 i reszta 2
38 div 3 = 12 i reszta 2
12 div 3 = 4 i reszta 0
4 div 3 = 1 i reszta 1
1 div 3 = 0 i reszta 1 (koniec)
Otrzymaliś my kolejne cyfry 11022.
Dwie ostatnie cyfry umieszczamy po przecinku.
Ostatecznie: 12 8/9 (10) = 110,22(3)
Pytanie: Czy jest to wartoś ć dokładna?
19
Konwersja z systemu dziesię tnego
Zadania:
Dowolnym sposobem wyznaczyć stałoprzecinkową
reprezentację bez znaku następujących liczb:
a) 10,125(10) à (2)
b) 8,13(10) à (4)
c) 120,125(10) à (5)
20
Izabela Szczęch
10
Wprowadzenie do informatyki - ć wiczenia
Zapis stałoprzecinkowy
ze znakiem
- definicja i konwersja
Zapis stałoprzecinkowy ze znakiem
§ Do reprezentacji znaku w zapisie stałoprzecinkowym
moż emy wykorzystać DOWOLNĄ reprezentację liczby
ze znakiem, przykładowo kod znak-moduł czy kod U2.
§ Liczba stałoprzecinkowa L w przykładowym
kodzie znakznak-moduł : L = 11101010,11101001 (ZM)
bit znaku
moduł liczby
1
1101010,11101001
Najstarszy bit to bit znaku. Jedynka na najstarszym bicie
mó wi nam, ż e liczba jest ujemna. Pozostaje nam obliczenie
jej wartoś ci, czyli wyznaczenie jej modułu. Moż na to zrobić
na kilka ró wnoważ nych sposobó w omó wionych wcześ niej.
Izabela Szczęch
22
11
Wprowadzenie do informatyki - ć wiczenia
Konwersje - ZADANIA
Zadanie 1:
Oblicz wartoś ć dziesiętną podanych stałoprzecinkowych liczb
dwó jkowych zapisanych w kodzie znak-moduł
a) 101010,10
c) 111111,11
b) 011110,11
d) 000110,01
Zadanie 2:
Wyznacz dwó jkową stałoprzecinkową reprezentację w kodzie
znak-moduł poniż szych liczb dziesiętnych z dokładnoś cią do 8 bitó w
po przecinku. Przyjmij, ż e wynik ma być zapisany na 16-tu bitach
a) 1,125
c) -2,0625
b) 0,1
d) -1,13
23
Zakres liczb
w dwó jkowej
reprezentacji
stałoprzecinkowej
Izabela Szczęch
12
Wprowadzenie do informatyki - ć wiczenia
Zakres liczb stałoprzecinkowych
w kodzie ZM
§ Jaka jest najmniejsza i największa wartoś ci liczby, któ rą da
się przedstawić w danej reprezentacji stałoprzecinkowej w
kodzie znakznak-moduł?
§ Łatwo zauważ yć , ż e w obu przypadkach moduł musi mieć
wartoś ć maksymalną (czyli zaró wno częś ć całkowita jak i
ułamkowa muszą się składać z samych 1),
a bit znaku musi być 0 dla wartoś ci największej
i 1 dla wartoś ci najmniejszej.
25
Zakres liczb stałoprzecinkowych
w kodzie ZM
§ Zadania
Zadania::
1. Wyznacz zakres dwó jkowych liczb stałoprzecinkowych w
kodzie ZM reprezentowanych na 16 bitach (1 bit na znak,
7 bitó w na częś ć całkowitą, 8 bitó w na częś ć ułamkową).
2. Podaj ogó lny wzó r okreś lający zakres ii-bitowych
dwó jkowych liczb stałoprzecinkowych w kodzie ZM,
gdzie najstarszy bit to bit znaku, częś ć całkowita jest
n-bitowa
bitowa,, a częś ć ułamkowa mm-bitowa.
26
Izabela Szczęch
13
Wprowadzenie do informatyki - ć wiczenia
Zakres liczb stałoprzecinkowych
w kodzie ZM
§ Liczbę stałoprzecinkową moż emy potraktować jako złoż enie
dwó ch liczb – całkowitej n-bitowej oraz ułamkowej m-bitowej.
§ Częś ć całkowita dla n bitó w przyjmuje największą wartoś ć ró wną
2n – 1
§ Częś ć ułamkowa będzie największa, gdy wszystkie jej bity
ustawione zostaną na 1. Dla m bitó w wartoś ć takiej liczby
wyniesie (2m - 1) / 2m
§ Łączymy obie częś ci i otrzymujemy zakres liczby w kodzie ZM:
n
- (2 - 1 +
2m -1
2
m
n
); 2 - 1 +
2m -1
2m
27
Dokładność
reprezentacji
stałoprzecinkowej
Izabela Szczęch
14
Wprowadzenie do informatyki - ć wiczenia
Dokładność reprezentacji
stałoprzecinkowej
§ Liczby wymierne dokładnie zapisywalne w komputerze to
tzw. liczby maszynowe.
§ Pozostałe liczby wymierne są wyraż ane z pewnym
przybliż eniem poprzez wykorzystanie liczb maszynowych.
§ Wartoś ci liczb stałoprzecinkowych ró wnomiernie
rozkładają się na osi (przykład dla reprezentacji z 4 bitami
ułamkowymi):
29
Dokładność reprezentacji
stałoprzecinkowej
§ Dla reprezentacji z 4 bitami częś ci ułamkowej, wartoś ci
pojawiają się na osi w stałym odstępie ró wnym 2-4.
§ Liczby nie obecne na osi, nie będę reprezentowane
dokładnie, będą reprezentowane jako przybliż enie do
najbliż szej liczby maszynowej, a więc z błędem
mniejszym niż 2-4.
30
Izabela Szczęch
15
Wprowadzenie do informatyki - ć wiczenia
Arytmetyka
w reprezentacji
stałoprzecinkowej
Arytmetyka w reprezentacji
stałoprzecinkowej
§ Przy działaniach na liczbach stałoprzecinkowych w kodzie
znak-moduł obowiązują te same reguły, co przy działaniach
na całkowitych liczbach w kodzie znak-moduł.
§ Nadmiar (niedomiar) moż na wykryć , jeś li wystąpiło
przeniesienie (lub poż yczka) na pozycję znakową.
32
Izabela Szczęch
16
Wprowadzenie do informatyki - ć wiczenia
Arytmetyka w reprezentacji
stałoprzecinkowej -zadania
Zadania:
Stosując dwó jkową stałoprzecinkową reprezentację
znak--moduł (bit znaku, 7 bitó w na częś ć całkowitą i 8 bitó w
znak
na częś ć ułamkową) zapisz następujące liczby dziesiętne i
wykonaj działania. Sprawdź poprawnoś ć otrzymanego
wyniku przeliczając go na wartoś ć w systemie dziesiętnym.
a)
b)
c)
d)
e)
1,125 + 20,5
-3,0 + (-2,5)
-2,0625 + 6,25
127,03125 + 3,5
-120,25+(-10,015625)
33
Izabela Szczęch
17
Download