Podstawy Informatyki Bożena Woźna-Szcześniak bwozna@gmail.com 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ć dziesiętna liczbę rzeczywista posiadajac a zarówno część 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) będziemy kodowali część 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 dziesiętna liczba rzeczywista A. Aby zakodować tę liczbę 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 dziesiętna liczba rzeczywista A. Aby zakodować tę liczbę w systemie o podstawie q: Przyjmujemy dokładność do n cyfr po przecinku z jaka chcemy przedstawić liczbę A. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 3 / 23
LICZBY RZECZYWISTE - Algorytm Hornera Dana jest dziesiętna liczba rzeczywista A. Aby zakodować tę liczbę w systemie o podstawie q: Przyjmujemy dokładność do n cyfr po przecinku z jaka chcemy przedstawić liczbę A. Mnożymy A przez podstawę systemu podniesiona do potęgi n. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 3 / 23
LICZBY RZECZYWISTE - Algorytm Hornera Dana jest dziesiętna liczba rzeczywista A. Aby zakodować tę liczbę w systemie o podstawie q: Przyjmujemy dokładność do n cyfr po przecinku z jaka chcemy przedstawić liczbę A. Mnożymy A przez podstawę systemu podniesiona do potęgi n. Zaokraglamy wynik mnożenia do liczby całkowitej, a następnie kodujemy ja w wybranym systemie tak, jak koduje się zwyczajne liczby całkowite. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 3 / 23
LICZBY RZECZYWISTE - Algorytm Hornera Dana jest dziesiętna liczba rzeczywista A. Aby zakodować tę liczbę w systemie o podstawie q: Przyjmujemy dokładność do n cyfr po przecinku z jaka chcemy przedstawić liczbę A. Mnożymy A przez podstawę systemu podniesiona do potęgi n. Zaokraglamy wynik mnożenia do liczby całkowitej, a następnie kodujemy ja w wybranym systemie tak, jak koduje się zwyczajne liczby całkowite. Na koniec, zgodnie ze wstępnym 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ć liczbę A = 2875, 1023 w systemie ósemkowym z dokładnościa do 5 miejsc po przecinku. Mnożymy liczbę A przez 8 5 : 2875, 1023 8 5 = 2875, 1023 32768 = 94211352.1664 Kodujemy liczbę 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 się reprezentację 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ż reprezentację 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 }{{}, 00001111 }{{} = 255, 06640625 255 15 256 Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 6 / 23
REPREZENTACJA ZMIENNOPOZYCYJNA SYSTEM CECHA-MANTYSA System jest oparty na podziale liczby na część ułamkowa zwana mantysa oraz na wykładnik potęgi podstawy systemu zwany cecha. Opracowany został na podstawie zapisu liczby w systemie pozycyjnym wagowym. Umożliwia zapis liczb rzeczywistych z ustalonym błędem względnym. 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 }{{}, 10100000 }{{} cecha mantysa W praktyce zwykle na cechę przeznaczamy jeden bajt, na mantysę minimum trzy bajty. Ilość bajtów przeznaczonych na cechę decyduje o zakresie. Ilość bajtów przeznaczonych na mantysę decyduje o błędzie. 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 +, bo ( 1) 0 = 1 1 oznacza, bo ( 1) 1 = 1 c cecha, całkowity wykładnik potęgi, dzięki któremu przecinek w liczbie zostaje przesunięty tak, aby utworzyć mantysę 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 się mantysę znormalizowana do przedziału 1; 2), czyli 1 (2) ; 10 (2) ). Mantysę zapisuje się w postaci liczby całkowitej dodatniej oraz bitu znaku, cechę przy pomocy kodu U2. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 10 / 23
Kodowanie FP2 - przykład dla liczby: Znak 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 2 c 00010110 (FP2) 0, 875 (10) = 0, 111 (2) s = 0 c = 0010 (U2) = 2 L = ( 1) 0 1, 11 (2) 2 ( 1) c = 1 = 1111 (U2) m = 1, 110 (2) = 1 3 4 m = 1, 110 (2) L = ( 1) 0 1 3 4 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 znak Cecha - kod U2 bit 15 14 13 12 11 10 waga s -16 8 4 2 1 Mantysa - kod ZM bit 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 2 c Aby zapisać A = 1984, 0415 (10) w kodzie FP2: Ustalamy znak: s = 0. Stosujac algorytm Hornera zapisujemy liczbę A w systemie binarnym (na takiej liczbie bitów, ile bitów ma mantysa + 1). 1984, 0415 2 11 = 4063316, 992 4063317 1984, 0415 = 11111000000, 00001010101 Dokonujemy normalizacji czyli przesuwamy przecinek tak, aby przed przecinkiem znajdowała się 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 zapamiętać, że ona tam jest i oszczędzić jeden bit nie zapisujac jej. Mantysę tworza kolejne cyfry spisane poczawszy od przecinka, aż po cyfrę, 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 przesunęliśmy o 10 miejsc w lewo, jako cechę trzeba zapisać liczbę 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 Zatem: s = 0, stad mamy ( 1) 0 0010101111000000 (FP2) m = 1111000000, stad 2 1 + 2 2 + 2 3 + 2 4 c = 01010 (U2) = 10, a więc mamy 2 10 Podstawiamy do wzoru na L i otrzymujemy: L = ( 1) 0 (2 0 + 2 1 + 2 2 + 2 3 + 2 4 ) 2 10 = = (1 + 1 2 + 1 4 + 1 8 + 1 16 ) 1024 = = 1 15 31 31744 1024 = 1024 = = 1984 16 16 16 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 liczbę dodatnia, stan 1 liczbę ujemna. Aby zatem zmienić znak liczby zmiennoprzecinkowej na przeciwny, wystarczy dokonać negacji tego bitu. Bity kodu cechy: Liczby zmiennoprzecinkowe IEEE 754 zapisuja cechę 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 precyzję, czyli dokładność odwzorowywania liczb rzeczywistych. Mantysy sa zapisywane w stałoprzecinkowym kodzie znak-moduł. Ponieważ mantysa jest prawie zawsze znormalizowana, tj. zawiera się w 1, 2). Wynika stad, iż pierwszy bit całkowity mantysy zawsze wynosi 1. Skoro tak, to nie musi on być zapamiętywany - będzie automatycznie odtwarzany w czasie wykonywania obliczeń na liczbie zmiennoprzecinkowej. W polu mantysy zapamiętujemy tylko bity ułamkowe. Dzięki tej prostej sztuczce zyskujemy jeden dodatkowy bit mantysy - zwiększamy 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ść dziesiętna liczby zmiennoprzecinkowej: 01000010110010000000000000000000 (IEEE754) Kod binarny dzielimy na poszczególne pola zawierajace kolejno znak, cechę 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) : ( 1) s m 2 c = ( 1) 0 19 16 26 = 25 16 26 = 25 2 2 = 25 4 = 100 (10) 01000010110010000000000000000000 (IEEE754) = 100 (10) Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 19 / 23
IEEE 754 -przykład Obliczyć wartość dziesiętna liczby zmiennoprzecinkowej: 11000001110110000000000000000000 (IEEE754) Kod binarny dzielimy na poszczególne pola zawierajace kolejno znak, cechę oraz bity ułamkowe mantysy: 11000001110110000000000000000000 s = 1 c = 1000011 (BIAS=127) = 131 127 = 4 m = 01, 10110000000000000000000 (ZM) = 1 11 16 Wartość liczby: L (IEEE754) = ( 1) s m 2 c = ( 1) 1 1 11 16 24 = 27 16 24 = 27 (10) 11000001110110000000000000000000 (IEEE754) = 27 (10) 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ęść całkowita równa 1 - w polu mantysy zapamiętywane 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ęś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