Podstawy Informatyki
Transkrypt
Podstawy Informatyki
Podstawy Informatyki Bożena Woźna-Szcześniak [email protected] Jan Długosz University, Poland Wykład 5 Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 1 / 23 LICZBY RZECZYWISTE - Algorytm Hornera Pozwala zakodować dziesietn ˛ a˛ liczbe˛ rzeczywista˛ posiadajac ˛ a˛ zarówno cz˛eść całkowita, ˛ jak i ułamkowa, ˛ w innym wybranym systemie pozycyjnym. Ma tylko jedno ograniczenie - należy z góry określić ilość cyfr, na której (co najwyżej) bedziemy ˛ kodowali cz˛eść ułamkowa˛ – czyli ilość cyfr po przecinku. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 2 / 23 LICZBY RZECZYWISTE - Algorytm Hornera Dana jest dziesietna ˛ liczba rzeczywista A. Aby zakodować te˛ liczbe˛ w systemie o podstawie q: Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 3 / 23 LICZBY RZECZYWISTE - Algorytm Hornera Dana jest dziesietna ˛ liczba rzeczywista A. Aby zakodować te˛ liczbe˛ w systemie o podstawie q: Przyjmujemy dokładność do n cyfr po przecinku z jaka˛ chcemy przedstawić liczbe˛ A. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 3 / 23 LICZBY RZECZYWISTE - Algorytm Hornera Dana jest dziesietna ˛ liczba rzeczywista A. Aby zakodować te˛ liczbe˛ w systemie o podstawie q: Przyjmujemy dokładność do n cyfr po przecinku z jaka˛ chcemy przedstawić liczbe˛ A. Mnożymy A przez podstawe˛ systemu podniesiona˛ do potegi ˛ n. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 3 / 23 LICZBY RZECZYWISTE - Algorytm Hornera Dana jest dziesietna ˛ liczba rzeczywista A. Aby zakodować te˛ liczbe˛ w systemie o podstawie q: Przyjmujemy dokładność do n cyfr po przecinku z jaka˛ chcemy przedstawić liczbe˛ A. Mnożymy A przez podstawe˛ systemu podniesiona˛ do potegi ˛ n. Zaokraglamy ˛ wynik mnożenia do liczby całkowitej, a nastepnie ˛ kodujemy ja˛ w wybranym systemie tak, jak koduje sie˛ zwyczajne liczby całkowite. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 3 / 23 LICZBY RZECZYWISTE - Algorytm Hornera Dana jest dziesietna ˛ liczba rzeczywista A. Aby zakodować te˛ liczbe˛ w systemie o podstawie q: Przyjmujemy dokładność do n cyfr po przecinku z jaka˛ chcemy przedstawić liczbe˛ A. Mnożymy A przez podstawe˛ systemu podniesiona˛ do potegi ˛ n. Zaokraglamy ˛ wynik mnożenia do liczby całkowitej, a nastepnie ˛ kodujemy ja˛ w wybranym systemie tak, jak koduje sie˛ zwyczajne liczby całkowite. Na koniec, zgodnie ze wstepnym ˛ założeniem, oddzielamy ostatnie n cyfr przecinkiem. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 3 / 23 Algorytm Hornera - PRZYKŁAD Zakodować liczbe˛ A = 2875, 1023 w systemie ósemkowym z dokładnościa˛ do 5 miejsc po przecinku. Mnożymy liczbe˛ A przez 85 : 2875, 1023 · 85 = 2875, 1023 ∗ 32768 = 94211352.1664 Kodujemy liczbe˛ 94211352 w systemie o podstawie 8. Wynosi ona: 547306430(8) Ustalamy miejsce przecinka zgodnie z założeniem, tj. 5473, 06430(8) Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 4 / 23 Reprezentacja liczb rzeczywistych Liczby rzeczywiste można przedstawiać: w postaci kodu stałoprzecinkowego (stałopozycyjnego) w postaci kodu zmiennoprzecinkowego (zmiennopozycyjnego) Nie jest możliwe przedstawienie nieskończonych zbiorów za pomoca˛ skończonej liczby bitów. Do obliczeń w komputerach stosuje sie˛ reprezentacje˛ skończonych podzbiorów liczb rzeczywistych. Zgodne jest to ze standardem IEEE 754, gdzie określony został standard zapisu i działań arytmetycznych na liczbach zmiennoprzecinkowych. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 5 / 23 REPREZENTACJA STAŁOPOZYCYJNA W notacji stałopozycyjnej możliwe jest reprezentowanie zakresu dodatnich i ujemnych liczb całkowitych ze środkiem w zerze. Przy założeniu ustalonego przecinka pozycyjnego format ten umożliwia również reprezentacje˛ liczb ze składnikiem ułamkowym. W notacji stałopozycyjnej nie moga˛ być reprezentowane ani bardzo duże liczby, ani bardzo małe ułamki. Ułamkowe składniki ilorazu przy dzieleniu dwóch dużych liczb moga˛ być utracone. Przykład: 11111111 | {z }, 00001111 | {z } = 255, 06640625 255 Bożena Woźna-Szcześniak (AJD) 15 256 Podstawy Informatyki Wykład 5 6 / 23 REPREZENTACJA ZMIENNOPOZYCYJNA SYSTEM CECHA-MANTYSA System jest oparty na podziale liczby na cz˛eść ułamkowa˛ zwana˛ mantysa˛ oraz na wykładnik potegi ˛ podstawy systemu zwany cecha. ˛ Opracowany został na podstawie zapisu liczby w systemie pozycyjnym wagowym. Umożliwia zapis liczb rzeczywistych z ustalonym błedem ˛ wzglednym. ˛ Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 7 / 23 REPREZENTACJA ZMIENNOPOZYCYJNA Przykład liczby binarnej zapisanej w postaci cecha-mantysa na dwóch bajtach 00000011 | {z }, 10100000 | {z } cecha mantysa W praktyce zwykle na ceche˛ przeznaczamy jeden bajt, na mantyse˛ minimum trzy bajty. Ilość bajtów przeznaczonych na ceche˛ decyduje o zakresie. Ilość bajtów przeznaczonych na mantyse˛ decyduje o błedzie. ˛ Liczby ujemne w mantysie sa˛ kodowane w systemie znak-moduł, zaś dla cechy w systemie u2. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 8 / 23 Reprezentacja liczb w systemie cecha-mantysa L = (−1)s · m · N c , gdzie: N-podstawa systemu s -to bit znaku: 0 oznacza 0 +0 , bo (−1)0 = 1 1 oznacza 0 −0 , bo (−1)1 = −1 c – cecha, całkowity wykładnik potegi, ˛ dzieki ˛ któremu przecinek w liczbie zostaje przesuniety ˛ tak, aby utworzyć mantyse˛ w zgodzie z powyższa˛ definicja. ˛ m – mantysa - liczba mniejsza od jedności. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 9 / 23 Kod FP2 (ang. floating point) Dla kodowania FP2 liczb zmiennoprzecinkowych przyjmuje sie˛ mantyse˛ znormalizowana˛ do przedziału h1; 2), czyli h1(2) ; 10(2) ). Mantyse˛ zapisuje sie˛ w postaci liczby całkowitej dodatniej oraz bitu znaku, ceche˛ przy pomocy kodu U2. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 10 / 23 Kodowanie FP2 - przykład Znak mantysy Cecha(c)− w kodzie U2 Mantysa(m)− 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) = 1 34 m = 1, 110(2) L = (−1)0 · 1 43 · 22 = 7(10) 0, 875(10) = 01111110(FP2) Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 11 / 23 Kodowanie FP2 - przykład bit waga znak 15 s 14 -16 bit waga 9 2−1 8 2−2 Cecha - kod U2 13 12 11 10 8 4 2 1 Mantysa - kod ZM 7 6 5 4 3 2−3 2−4 2−5 2−6 2−7 2 2−8 1 2−9 0 2−10 L = (−1)s · 1.m · 2c Aby zapisać A = 1984, 0415(10) w kodzie FP2: Ustalamy znak: s = 0. Stosujac ˛ algorytm Hornera zapisujemy liczbe˛ A w systemie binarnym (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, aby przed przecinkiem znajdowała sie˛ tylko jedna niezerowa cyfra. Otrzymujemy: 1, 111100000000001010101 Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 12 / 23 Kodowanie FP2 - przykład Skoro jedyna˛ możliwa˛ niezerowa˛ cyfra˛ w systemie dwójkowym jest 1, to możemy zapamietać, ˛ że ona tam jest i oszcz˛edzić jeden bit nie zapisujac ˛ jej. Mantyse˛ tworza˛ kolejne cyfry spisane poczawszy ˛ od przecinka, aż po cyfre, ˛ która zapisana zostanie na ostatnim bicie zarezerwowanym dla mantysy (w tym przykładze 10 bitów). Jeśli cyfr jest mniej niż bitów mantysy, to wolne bity uzupełniamy 0). m = 1111000000 Ponieważ przecinek przesuneliśmy ˛ o 10 miejsc w lewo, jako ceche˛ trzeba zapisać liczbe˛ 10 w kodzie U2, tj. c = 01010(U2) Zatem 1984, 0415(10) = 0010101111000000(FP2) Bożena Woźna-Szcześniak (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 1 1 1 + + + ) · 1024 = 2 4 8 16 15 31 31744 =1 · 1024 = ∗ 1024 = = 1984 16 16 16 = (1 + Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 14 / 23 UWAGA Standard kodu FP2 przewiduje dodatkowo wartości specjalne: Maksymalna wartość cechy przy zerowej wartości mantysy daje w zależności od bitu znaku wartość zwana˛ −INF lub INF oznaczajac ˛ a˛ odpowiednio −∞ i +∞. Maksymalna wartość cechy przy jakiejkolwiek niezerowej wartości mantysy, to tzw. NaN(ang. Not a Number), czyli wartość, która nie jest poprawna˛ liczba. ˛ Bożena Woźna-Szcześniak (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 Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 16 / 23 Standard IEEE 754 Bit znaku: pierwszy bit w zapisie liczby zwany jest bitem znaku. Stan 0 oznacza liczbe˛ dodatnia, ˛ stan 1 liczbe˛ ujemna. ˛ Aby zatem zmienić znak liczby zmiennoprzecinkowej na przeciwny, wystarczy dokonać negacji tego bitu. Bity kodu cechy: Liczby zmiennoprzecinkowe IEEE 754 zapisuja˛ ceche˛ w kodzie z nadmiarem. W pojedynczej precyzji cecha posiada 8 bitów, a nadmiar wynosi 127. Zatem w polu cechy można zapisać wartości od −127 (wszystkie bity wyzerowane) do 128 (wszystkie bity ustawione na 1). W podwójnej precyzji cecha posiada 11 bitów, a nadmiar wynosi 1023. Zatem w polu cechy można zapisać wartości od −1023 do 1024. Wzrost ilości bitów cech liczb zmiennoprzecinkowych wpływa na ich zakres. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 17 / 23 Standard IEEE 754 Bity mantysy: W pojedynczej precyzji mantysa posiada 23 bity, a w podwójnej precyzji 52 bity. Wzrost liczby bitów mantysy liczb zmiennoprzecinkowych wpływa na ich precyzje, ˛ czyli dokładność odwzorowywania liczb rzeczywistych. Mantysy sa˛ zapisywane w stałoprzecinkowym kodzie znak-moduł. Ponieważ mantysa jest prawie zawsze znormalizowana, tj. zawiera sie˛ w h1, 2). Wynika stad, ˛ iż pierwszy bit całkowity mantysy zawsze wynosi 1. Skoro tak, to nie musi on być zapamietywany ˛ - bedzie ˛ automatycznie odtwarzany w czasie wykonywania obliczeń na liczbie zmiennoprzecinkowej. W polu mantysy zapamietujemy ˛ tylko bity ułamkowe. Dzieki ˛ tej prostej sztuczce zyskujemy jeden dodatkowy bit mantysy zwiekszamy ˛ jej rozdzielczość do 24 bitów dla formatu pojedynczej precyzji i do 53 bitów dla formatu podwójnej precyzji. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 18 / 23 IEEE 754 -przykład Obliczyć wartość dziesietn ˛ a˛ 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) = 19 16 Wartość liczby L(IEEE754) : 19 6 25 6 ·2 = · 2 = 25 · 22 = 25 · 4 = 100(10) 16 16 01000010110010000000000000000000(IEEE754) = 100(10) (−1)s · m · 2c = (−1)0 · Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 19 / 23 IEEE 754 -przykład Obliczyć wartość dziesietn ˛ a˛ 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) = 1 11 16 Wartość liczby: 11 4 27 4 ·2 =− · 2 = −27(10) 16 16 11000001110110000000000000000000(IEEE754) = −27(10) L(IEEE754) = (−1)s · m · 2c = (−1)1 · 1 Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 20 / 23 Wartości specjalne w IEEE 745 Wartość zero W formacie IEEE 754 nie można zapisać w normalny sposób wartości 0, ponieważ mantysa ma domyślna˛ cz˛eść całkowita˛ równa˛ 1 - w polu mantysy zapamietywane ˛ sa˛ jedynie bity ułamkowe. Dlatego zero jest specjalnym przypadkiem liczby zmiennoprzecinkowej, gdzie zarówno pole wykładnika jak i mantysy zawiera same 0. Bit znaku może przyjmować dowolna˛ wartość (stad ˛ możemy dostać dodatnie lub ujemne 0, jednakże przy porównaniu sa˛ one traktowane jak równe sobie). Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 21 / 23 Wartości specjalne w IEEE 745 Wartość zdenormalizowana Jeśli wszystkie bity cechy maja˛ wartość 0, lecz mantysa zawiera bity o wartościach 1 (w przeciwnym razie liczba zostanie potraktowana jak opisane wcześniej zero), to jest to tzw. zdenormalizowana liczba zmiennoprzecinkowa. W takim przypadku mantysa nie posiada domyślnej cz˛eści całkowitej 1, lecz jest liczba˛ ułamkowa, ˛ której bity zawarte sa˛ w polu formatu IEEE 754. Wartość zdenormalizowana˛ liczby zmiennoprzecinkowej liczymy wedł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) Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 22 / 23 Wartości specjalne w IEEE 745 Pojedyncza precyzja – najmniejsza wartość: 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 Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 23 / 23