Podstawy Informatyki
Bozena [email protected]
Jan Długosz University, Poland
Wykład 5
Bozena Wozna-Szczesniak (AJD) Podstawy Informatyki Wykład 5 1 / 23
LICZBY RZECZYWISTE - Algorytm Hornera
Pozwala zakodowac dziesietna liczbe rzeczywista posiadajacazarówno czesc całkowita, jak i ułamkowa, w innym wybranymsystemie pozycyjnym.
Ma tylko jedno ograniczenie - nalezy z góry okreslic ilosc cyfr, naktórej (co najwyzej) bedziemy kodowali czesc ułamkowa – czyliilosc cyfr po przecinku.
Bozena Wozna-Szczesniak (AJD) Podstawy Informatyki Wykład 5 2 / 23
LICZBY RZECZYWISTE - Algorytm Hornera
Dana jest dziesietna liczba rzeczywista A. Aby zakodowac te liczbe wsystemie o podstawie q:
Przyjmujemy dokładnosc do n cyfr po przecinku z jaka chcemyprzedstawic liczbe A.
Mnozymy A przez podstawe systemu podniesiona do potegi n.
Zaokraglamy wynik mnozenia do liczby całkowitej, a nastepniekodujemy ja w wybranym systemie tak, jak koduje sie zwyczajneliczby całkowite.
Na koniec, zgodnie ze wstepnym załozeniem, oddzielamy ostatnien cyfr przecinkiem.
Bozena Wozna-Szczesniak (AJD) Podstawy Informatyki Wykład 5 3 / 23
LICZBY RZECZYWISTE - Algorytm Hornera
Dana jest dziesietna liczba rzeczywista A. Aby zakodowac te liczbe wsystemie o podstawie q:
Przyjmujemy dokładnosc do n cyfr po przecinku z jaka chcemyprzedstawic liczbe A.
Mnozymy A przez podstawe systemu podniesiona do potegi n.
Zaokraglamy wynik mnozenia do liczby całkowitej, a nastepniekodujemy ja w wybranym systemie tak, jak koduje sie zwyczajneliczby całkowite.
Na koniec, zgodnie ze wstepnym załozeniem, oddzielamy ostatnien cyfr przecinkiem.
Bozena Wozna-Szczesniak (AJD) Podstawy Informatyki Wykład 5 3 / 23
LICZBY RZECZYWISTE - Algorytm Hornera
Dana jest dziesietna liczba rzeczywista A. Aby zakodowac te liczbe wsystemie o podstawie q:
Przyjmujemy dokładnosc do n cyfr po przecinku z jaka chcemyprzedstawic liczbe A.
Mnozymy A przez podstawe systemu podniesiona do potegi n.
Zaokraglamy wynik mnozenia do liczby całkowitej, a nastepniekodujemy ja w wybranym systemie tak, jak koduje sie zwyczajneliczby całkowite.
Na koniec, zgodnie ze wstepnym załozeniem, oddzielamy ostatnien cyfr przecinkiem.
Bozena Wozna-Szczesniak (AJD) Podstawy Informatyki Wykład 5 3 / 23
LICZBY RZECZYWISTE - Algorytm Hornera
Dana jest dziesietna liczba rzeczywista A. Aby zakodowac te liczbe wsystemie o podstawie q:
Przyjmujemy dokładnosc do n cyfr po przecinku z jaka chcemyprzedstawic liczbe A.
Mnozymy A przez podstawe systemu podniesiona do potegi n.
Zaokraglamy wynik mnozenia do liczby całkowitej, a nastepniekodujemy ja w wybranym systemie tak, jak koduje sie zwyczajneliczby całkowite.
Na koniec, zgodnie ze wstepnym załozeniem, oddzielamy ostatnien cyfr przecinkiem.
Bozena Wozna-Szczesniak (AJD) Podstawy Informatyki Wykład 5 3 / 23
LICZBY RZECZYWISTE - Algorytm Hornera
Dana jest dziesietna liczba rzeczywista A. Aby zakodowac te liczbe wsystemie o podstawie q:
Przyjmujemy dokładnosc do n cyfr po przecinku z jaka chcemyprzedstawic liczbe A.
Mnozymy A przez podstawe systemu podniesiona do potegi n.
Zaokraglamy wynik mnozenia do liczby całkowitej, a nastepniekodujemy ja w wybranym systemie tak, jak koduje sie zwyczajneliczby całkowite.
Na koniec, zgodnie ze wstepnym załozeniem, oddzielamy ostatnien cyfr przecinkiem.
Bozena Wozna-Szczesniak (AJD) Podstawy Informatyki Wykład 5 3 / 23
Algorytm Hornera - PRZYKŁAD
Zakodowac liczbe A = 2875,1023 w systemie ósemkowym zdokładnoscia do 5 miejsc po przecinku.
Mnozymy liczbe A przez 85:
2875,1023 · 85 = 2875,1023 ∗ 32768 = 94211352.1664
Kodujemy liczbe 94211352 w systemie o podstawie 8. Wynosiona: 547306430(8)
Ustalamy miejsce przecinka zgodnie z załozeniem, tj.5473,06430(8)
Bozena Wozna-Szczesniak (AJD) Podstawy Informatyki Wykład 5 4 / 23
Reprezentacja liczb rzeczywistych
Liczby rzeczywiste mozna przedstawiac:
w postaci kodu stałoprzecinkowego (stałopozycyjnego)
w postaci kodu zmiennoprzecinkowego (zmiennopozycyjnego)
Nie jest mozliwe przedstawienie nieskonczonych zbiorów zapomoca skonczonej liczby bitów. Do obliczen w komputerachstosuje sie reprezentacje skonczonych podzbiorów liczbrzeczywistych.
Zgodne jest to ze standardem IEEE 754, gdzie okreslony zostałstandard zapisu i działan arytmetycznych na liczbachzmiennoprzecinkowych.
Bozena Wozna-Szczesniak (AJD) Podstawy Informatyki Wykład 5 5 / 23
REPREZENTACJA STAŁOPOZYCYJNAW notacji stałopozycyjnej mozliwe jest reprezentowanie zakresudodatnich i ujemnych liczb całkowitych ze srodkiem w zerze.
Przy załozeniu ustalonego przecinka pozycyjnego format tenumozliwia równiez reprezentacje liczb ze składnikiem ułamkowym.
W notacji stałopozycyjnej nie moga byc reprezentowane anibardzo duze liczby, ani bardzo małe ułamki.
Ułamkowe składniki ilorazu przy dzieleniu dwóch duzych liczbmoga byc utracone.
Przykład:
11111111︸ ︷︷ ︸255
,00001111︸ ︷︷ ︸15256
= 255,06640625
Bozena Wozna-Szczesniak (AJD) Podstawy Informatyki Wykład 5 6 / 23
REPREZENTACJA ZMIENNOPOZYCYJNASYSTEM CECHA-MANTYSA
System jest oparty na podziale liczby na czesc ułamkowa zwanamantysa oraz na wykładnik potegi podstawy systemu zwanycecha.
Opracowany został na podstawie zapisu liczby w systemiepozycyjnym wagowym.
Umozliwia zapis liczb rzeczywistych z ustalonym błedemwzglednym.
Bozena Wozna-Szczesniak (AJD) Podstawy Informatyki Wykład 5 7 / 23
REPREZENTACJA ZMIENNOPOZYCYJNA
Przykład liczby binarnej zapisanej w postaci cecha-mantysa nadwóch bajtach
00000011︸ ︷︷ ︸cecha
,10100000︸ ︷︷ ︸mantysa
W praktyce zwykle na ceche przeznaczamy jeden bajt, namantyse minimum trzy bajty.
Ilosc bajtów przeznaczonych na ceche decyduje o zakresie.
Ilosc bajtów przeznaczonych na mantyse decyduje o błedzie.
Liczby ujemne w mantysie sa kodowane w systemie znak-moduł,zas dla cechy w systemie u2.
Bozena Wozna-Szczesniak (AJD) Podstawy Informatyki Wykład 5 8 / 23
Reprezentacja liczb w systemie cecha-mantysa
L = (−1)s ·m · Nc ,
gdzie:N-podstawa systemu
s -to bit znaku:
0 oznacza ′+′, bo (−1)0 = 1
1 oznacza ′−′, bo (−1)1 = −1
c – cecha, całkowity wykładnik potegi, dzieki któremu przecinek wliczbie zostaje przesuniety tak, aby utworzyc mantyse w zgodzie zpowyzsza definicja.
m – mantysa - liczba mniejsza od jednosci.
Bozena Wozna-Szczesniak (AJD) Podstawy Informatyki Wykład 5 9 / 23
Kod FP2 (ang. floating point)
Dla kodowania FP2 liczb zmiennoprzecinkowych przyjmuje siemantyse znormalizowana do przedziału 〈1;2), czyli 〈1(2);10(2)).
Mantyse zapisuje sie w postaci liczby całkowitej dodatniej orazbitu znaku, ceche przy pomocy kodu U2.
Bozena Wozna-Szczesniak (AJD) Podstawy Informatyki Wykład 5 10 / 23
Kodowanie FP2 - przykładZnak Cecha(c)− Mantysa(m)−
mantysy w kodzie U2 w kodzie ZM
Bit 7 6 5 4 3 2 1 0
Waga s −8 4 2 1 2−1 2−2 2−3
L = (−1)s · 1.m · 2c
dla liczby:
00010110(FP2) 0,875(10) = 0,111(2)
s = 0 L = (−1)0 · 1,11(2) · 2(−1)
c = 0010(U2) = 2 c = −1 = 1111(U2)
m = 1,110(2) = 134 m = 1,110(2)
L = (−1)0 · 134 · 2
2 = 7(10) 0,875(10) = 01111110(FP2)
Bozena Wozna-Szczesniak (AJD) Podstawy Informatyki Wykład 5 11 / 23
Kodowanie FP2 - przykładznak Cecha - kod U2
bit 15 14 13 12 11 10waga s -16 8 4 2 1
Mantysa - kod ZMbit 9 8 7 6 5 4 3 2 1 0
waga 2−1 2−2 2−3 2−4 2−5 2−6 2−7 2−8 2−9 2−10
L = (−1)s · 1.m · 2c
Aby zapisac A = 1984,0415(10) w kodzie FP2:Ustalamy znak: s = 0.
Stosujac algorytm Hornera zapisujemy liczbe A w systemiebinarnym (na takiej liczbie bitów, ile bitów ma mantysa + 1).
1984,0415 · 211 = 4063316,992 ≈ 4063317
1984,0415 = 11111000000,00001010101
Dokonujemy normalizacji – czyli przesuwamy przecinek tak, abyprzed przecinkiem znajdowała sie tylko jedna niezerowa cyfra.Otrzymujemy: 1,111100000000001010101
Bozena Wozna-Szczesniak (AJD) Podstawy Informatyki Wykład 5 12 / 23
Kodowanie FP2 - przykład
Skoro jedyna mozliwa niezerowa cyfra w systemie dwójkowymjest 1, to mozemy zapamietac, ze ona tam jest i oszczedzic jedenbit nie zapisujac jej.
Mantyse tworza kolejne cyfry spisane poczawszy od przecinka, azpo cyfre, która zapisana zostanie na ostatnim biciezarezerwowanym dla mantysy (w tym przykładze 10 bitów). Jeslicyfr jest mniej niz bitów mantysy, to wolne bity uzupełniamy 0).
m = 1111000000
Poniewaz przecinek przesunelismy o 10 miejsc w lewo, jako cechetrzeba zapisac liczbe 10 w kodzie U2, tj.
c = 01010(U2)
Zatem1984,0415(10) = 0010101111000000(FP2)
Bozena Wozna-Szczesniak (AJD) Podstawy Informatyki Wykład 5 13 / 23
Dekodowanie - przykład
0010101111000000(FP2)
Zatem:
s = 0, stad mamy (−1)0
m = 1111000000, stad 2−1 + 2−2 + 2−3 + 2−4
c = 01010(U2) = 10, a wiec mamy 210
Podstawiamy do wzoru na L i otrzymujemy:
L = (−1)0 · (20 + 2−1 + 2−2 + 2−3 + 2−4) · 210 =
= (1 +12+
14+
18+
116
) · 1024 =
= 11516· 1024 =
3116∗ 1024 =
3174416
= 1984
Bozena Wozna-Szczesniak (AJD) Podstawy Informatyki Wykład 5 14 / 23
UWAGA
Standard kodu FP2 przewiduje dodatkowo wartosci specjalne:
Maksymalna wartosc cechy przy zerowej wartosci mantysy daje wzaleznosci od bitu znaku wartosc zwana −INF lub INFoznaczajaca odpowiednio −∞ i +∞.
Maksymalna wartosc cechy przy jakiejkolwiek niezerowej wartoscimantysy, to tzw. NaN(ang. Not a Number), czyli wartosc, która niejest poprawna liczba.
Bozena Wozna-Szczesniak (AJD) Podstawy Informatyki Wykład 5 15 / 23
Standard IEEE 754
Pojedyncza precyzja = 32 (4 Bajty)
kolejne bity (od lewej) liczba bitów znaczenie
1 1 bitznaku
2− 9 8 cecha(BIAS = 127)
10− 33 23 mantysa
Podwójna precyzja = 64 (8 Bajtów)
kolejne bity (od lewej) liczba bitów znaczenie
1 1 bitznaku
2− 12 11 cecha(BIAS = 1023)
13− 64 52 mantysa
Bozena Wozna-Szczesniak (AJD) Podstawy Informatyki Wykład 5 16 / 23
Standard IEEE 754
Bit znaku:pierwszy bit w zapisie liczby zwany jest bitem znaku. Stan 0oznacza liczbe dodatnia, stan 1 liczbe ujemna. Aby zatem zmienicznak liczby zmiennoprzecinkowej na przeciwny, wystarczy dokonacnegacji tego bitu.
Bity kodu cechy:Liczby zmiennoprzecinkowe IEEE 754 zapisuja ceche w kodzie znadmiarem.W pojedynczej precyzji cecha posiada 8 bitów, a nadmiar wynosi127. Zatem w polu cechy mozna zapisac wartosci od −127(wszystkie bity wyzerowane) do 128 (wszystkie bity ustawione na1).W podwójnej precyzji cecha posiada 11 bitów, a nadmiar wynosi1023. Zatem w polu cechy mozna zapisac wartosci od −1023 do1024.Wzrost ilosci bitów cech liczb zmiennoprzecinkowych wpływa na ichzakres.
Bozena Wozna-Szczesniak (AJD) Podstawy Informatyki Wykład 5 17 / 23
Standard IEEE 754
Bity mantysy:W pojedynczej precyzji mantysa posiada 23 bity, a w podwójnejprecyzji 52 bity.
Wzrost liczby bitów mantysy liczb zmiennoprzecinkowych wpływana ich precyzje, czyli dokładnosc odwzorowywania liczbrzeczywistych.
Mantysy sa zapisywane w stałoprzecinkowym kodzie znak-moduł.Poniewaz mantysa jest prawie zawsze znormalizowana, tj. zawierasie w 〈1,2). Wynika stad, iz pierwszy bit całkowity mantysy zawszewynosi 1. Skoro tak, to nie musi on byc zapamietywany - bedzieautomatycznie odtwarzany w czasie wykonywania obliczen naliczbie zmiennoprzecinkowej.
W polu mantysy zapamietujemy tylko bity ułamkowe. Dzieki tejprostej sztuczce zyskujemy jeden dodatkowy bit mantysy -zwiekszamy jej rozdzielczosc do 24 bitów dla formatu pojedynczejprecyzji i do 53 bitów dla formatu podwójnej precyzji.
Bozena Wozna-Szczesniak (AJD) Podstawy Informatyki Wykład 5 18 / 23
IEEE 754 -przykład
Obliczyc wartosc dziesietna liczby zmiennoprzecinkowej:
01000010110010000000000000000000(IEEE754)
Kod binarny dzielimy na poszczególne pola zawierajace kolejno znak,ceche oraz bity ułamkowe mantysy:
01000010110010000000000000000000
s = 0
c = 10000101(BIAS=127) = 133− 127 = 6
m = 01,10010000000000000000000(ZM) =1916
Wartosc liczby L(IEEE754):
(−1)s ·m · 2c = (−1)0 · 1916· 26 =
2516· 26 = 25 · 22 = 25 · 4 = 100(10)
01000010110010000000000000000000(IEEE754) = 100(10)
Bozena Wozna-Szczesniak (AJD) Podstawy Informatyki Wykład 5 19 / 23
IEEE 754 -przykład
Obliczyc wartosc dziesietna liczby zmiennoprzecinkowej:
11000001110110000000000000000000(IEEE754)
Kod binarny dzielimy na poszczególne pola zawierajace kolejno znak,ceche oraz bity ułamkowe mantysy:
11000001110110000000000000000000
s = 1
c = 1000011(BIAS=127) = 131− 127 = 4
m = 01,10110000000000000000000(ZM) = 11116
Wartosc liczby:
L(IEEE754) = (−1)s ·m · 2c = (−1)1 · 11116· 24 = −27
16· 24 = −27(10)
11000001110110000000000000000000(IEEE754) = −27(10)
Bozena Wozna-Szczesniak (AJD) Podstawy Informatyki Wykład 5 20 / 23
Wartosci specjalne w IEEE 745Wartosc zero
W formacie IEEE 754 nie mozna zapisac w normalny sposóbwartosci 0, poniewaz mantysa ma domyslna czesc całkowitarówna 1 - w polu mantysy zapamietywane sa jedynie bityułamkowe.
Dlatego zero jest specjalnym przypadkiem liczbyzmiennoprzecinkowej, gdzie zarówno pole wykładnika jak imantysy zawiera same 0. Bit znaku moze przyjmowac dowolnawartosc (stad mozemy dostac dodatnie lub ujemne 0, jednakzeprzy porównaniu sa one traktowane jak równe sobie).
Bozena Wozna-Szczesniak (AJD) Podstawy Informatyki Wykład 5 21 / 23
Wartosci specjalne w IEEE 745Wartosc zdenormalizowana
Jesli wszystkie bity cechy maja wartosc 0, lecz mantysa zawierabity o wartosciach 1 (w przeciwnym razie liczba zostaniepotraktowana jak opisane wczesniej zero), to jest to tzw.zdenormalizowana liczba zmiennoprzecinkowa. W takimprzypadku mantysa nie posiada domyslnej czesci całkowitej 1,lecz jest liczba ułamkowa, której bity zawarte sa w polu formatuIEEE 754.
Wartosc zdenormalizowana liczby zmiennoprzecinkowej liczymywedług wzoru:
Pojedyncza precyzja: L = (−1)s ·m · 2−126,
gdzie m = 00,(pole mantysy)(ZM)
Podwójna precyzja: L = (−1)s ·m · 2−1022,
gdzie m = 00,(pole mantysy)(ZM)
Bozena Wozna-Szczesniak (AJD) Podstawy Informatyki Wykład 5 22 / 23
Wartosci specjalne w IEEE 745
Pojedyncza precyzja – najmniejsza wartosc:
00000000000000000000000000000001(IEEE754)
m = 00,00000000000000000000001(U1) = 2−23
min(IEEE754) = 2−23 · 2−126 = 2−149
min(IEEE754) = 1,4012984643248170709237295832899 · 10−45
min(IEEE754) = 1,4 · 10−45
Bozena Wozna-Szczesniak (AJD) Podstawy Informatyki Wykład 5 23 / 23