Wielkości liczbowe Wykład z Podstaw Informatyki dla I roku BO Piotr Mika
Wprowadzenie, liczby naturalne Komputer to podstawowe narzędzie do wykonywania obliczeń Jeden bajt reprezentuje 0 oraz liczby naturalne od 1 do 255 2 bajty: 2 0 + 2 1 + 2 2 + 2 3 + 2 4 + 2 5 + 2 6 + 2 7 + 2 8 + 2 9 + 2 10 + 2 11 + 2 12 + 2 13 + 2 14 + 2 15 =65535 Ogólny wzór: 2 0 + 2 1 +...+ 2 n = 2 n+1-1 (2 16-1=65535) 4 bajty: 2 32-1= 4 294 967 296,00 (ponad 4 miliardy) Im więcej bajtów tym większa wartość - tania pamięć nie ma problemu ver. 2.2 Wielkości liczbowe (2/11)
Liczby całkowite Konieczne jest wprowadzenie umowy dotyczącej kodowania znaku liczny, np. znak-moduł : 1 bit oznacza znak liczby. 1 +, 0 -. Dla 1 bajta mamy 127 do +127 Bit 7 6 5 4 3 2 1 0 Znaczenie Znak 64 32 16 8 4 2 1 Wada: liczba 0000 0000 oznacza +0, liczba 0000 0001 ozn. -0 Inny sposób kodowania system uzupełnieniowy Bit 7 6 5 4 3 2 1 0 Znaczenie 128-64 -32-16 -8-4 -2-1 Liczby z zakresu od 127 do 128 (brak symetrii), 00000000 0 00000010-2 10000000 128 11111111 1 00000001-1 00000011-3 01111111-127 11111110 2 ver. 2.2 Wielkości liczbowe (3/11)
Liczby całkowite, cd Przy użyciu kodu uzupełnieniowego można uzyskać każdą liczbę z zakresu od 127 do 128 dla 1 bajta liczbę z zakresu od 16383 do 16384 dla 2 bajtów Otrzymane wartości są dokładne Zawsze istnieje górne i dolne ograniczenie zakresu liczb zależy to od liczby bajtów Jest to system stałoprzecinkowy przecinek leży za prawym skrajnym znakiem Tylko w takim systemie otrzymamy w pełni dokładne wartości Liczby rzeczywiste zawsze dają wyniki z pewnym błędem ver. 2.2 Wielkości liczbowe (4/11)
Liczby rzeczywiste Posiadają część całkowitą i ułamkową. Przecinek nie może zajmować skrajnych pozycji (albo sam ułamek, albo tylko część całkowita). Liczba dodatnia zapisana w 2 bajtach, przecinek w środku: 1 1 1 1 1 1 1 1, 1 1 1 1 1 1 1 1 Bajt z lewej pozwala zapisać liczby do 255, a bajt z prawej liczby do 255/256 (1/2+1/4+1/8+...+1/256 = 255/256 = 0,99609375 Liczba większa niż 255 nie mieści się, bity z prawej strony są puste Zapis ułamka ½ to: 00000000,10000000 dużo zmarnowanego miejsca Zapis bardzo małej liczby 00000000,00000001 obcięcie mniejszych wartości i zmarnowanie miejsca po prawej stronie znaczenie ma 1 bit z 16 bitów ver. 2.2 Wielkości liczbowe (5/11)
Dokładność obliczeń, błędy Wielkość błędu powinna być znana i niezależna od wartości biorących udział w obliczeniach. Porównajmy błąd dla kilku liczb w formacie stałoprzecinkowym: 1) 10000000,00000001 1 2) 00000001,00000001 1 3) 00000000,00000001 1 We wszystkich przypadkach odcięto wartość 2-9 = 1/512 = 0.001953125. Jest to tzw. błąd bezwzględny. Taką wartość tracimy ponieważ brakuje miejsca. Dla 1) ma małe znaczenie, dla 3) to jest połowa pozostałej wartości liczby. Błąd względny= =(błąd bezwzględny/wartość liczby)*100% -takie obliczenia są niewiarygodne -nie można porównać ze sobą wyników, które są obarczone różnym błędem -stałe położenie przecinka wyklucza możliwość zastosowania tego zapisu 0,001953152 *100% 50,00% 0,00390625 ver. 2.2 Wielkości liczbowe (6/11) 1) 2) 3) 0,001953152 128,00390625 *100% 0,001526% 0,001953152 *100% 0,194552% 1,00390625
Zapis zmiennoprzecinkowy Służy do zapisu liczb rzeczywistych z ustalonym błędem: M mantysa, [0.1, 1) L=M*N E N podstawa systemu zgodnie z zapisem pozycyjnym E cecha czyli wykładnik potęgi tak przesuwa przecinek, aby utworzyć mantysę zgodnie z definicją, np.. Liczby dziesiętne zapisane w postaci cecha-mantysa: 2340,23 = 0,234023*10 4 Cecha = 4 2,7363 = 0,27363*10 1 Cecha = 1 0,15934 = 0,15934*10 0 Cecha = 0 0,000243 = 0,243*10-3 Cecha = -3 ver. 2.2 Wielkości liczbowe (7/11)
Zapis zmiennoprzecinkowy, c.d. W systemie binarnym znormalizowana mantysa ma po przecinku zawsze wartość 1, np. 0 0 0 0 0 0 1 1, 1 0 1 0 0 0 0 0 Cecha Mantysa Najczęściej na cechę przeznaczamy 1 bajt, na mantysę min. 3 bajty Przy obliczaniu błędu wartość cechy nie ma znaczenia: Dla każdej liczby bajtów można obliczyć maksymalny błąd C blad * N liczba * N C *100% blad liczba *100% ver. 2.2 Wielkości liczbowe (8/11)
Zapis zmiennoprzecinkowy, c.d. Najmniejsza możliwa mantysa to (0,10000000) 2 czyli (0,5) 10 Największy możliwy błąd wystąpi wtedy, gdy po prawej stronie będą same jedynki: 1/512+1/1024+1/2048+1/4096 +... = =(1/512)/(1-1/2)=2/512=1/256=0,00390625 Korzystano ze wzoru na sumę nieskończonego ciągu geometrycznego S=a o /(1-q), a o =1/512, q=1/2 Maksymalny błąd względny wynosi: (0,00390625/0,5)*100%=0,78125% Im więcej bajtów tym większa dokładność, dla 1 bajta na mantysę max błąd względny nie przekracza 0,8% - możemy określić dokładność obl. Dla liczb ujemnych ta sama zasada zmniejszy się dokładność (7 bitów) Ten zapis zapewnia porównywalną dokładność wszystkich obliczeń. Dokładność zależy od ilości bajtów przeznaczonych na liczbę Za dokładność zapisu odpowiada mantysa gdy chcemy zwiększyć dokładność dodajemy bajt do mantysy za zakres reprezentowanych liczb odpowiada cecha - gdy chcemy zwiększyć zakres dodajemy bajt do cechy ver. 2.2 Wielkości liczbowe (9/11)
Zapis zmiennoprzecinkowy, c.d. Dla liczb rzeczywistych największa cecha zajmująca 1 bajt, reprezentująca wartości dodatnie i ujemne to 128, czyli maksymalna liczba to 2 128 (ok. 3,4*10 38 ). Dla liczb ujemnych to 127, czyli najmniejsza liczba to 2-127 (ok. 5,8*10-39 ), liczby mniejsze są tożsame z zerem. Często stosuje się kod uzupełnieniowy, w którym cecha należy [-128, 127] Zwiększenie liczby bajtów przeznaczonych na cechę do dwóch zwiększa zakres cyfr do ogromnych wartości i zwykle wystarcza do najbardziej skomplikowanych obliczeń ver. 2.2 Wielkości liczbowe (10/11)
Standard zapisu liczb zmienno przecinkowych Norma IEEE (standard 754), wprowadzona przez amerykańskie stowarzyszenie inżynierów elektryków definiująca kodowanie liczb zmienno przecinkowych Liczba rzeczywista 4 bajty, liczba podwójnej precyzji 8 bajtów Kolejne bity (od lewej) Liczba rzeczywista Znaczenie 1 Znak mantysy 2-9 (osiem) Cecha 10-32 (dwadzieścia trzy) Mantysa Dla mantysy 23 bitowej dokładność liczby wynosi 7 pozycji dziesiętnych Liczba podwójnej precyzji Kolejne bity (od lewej) Znaczenie 1 Znak mantysy 2-12 (jedenaście) Cecha 13-64 (pięćdziesiąt dwa) Mantysa Dla mantysy 52 bitowej dokładność liczby wynosi 15 pozycji dziesiętnych W mantysie l. ujemne kodowane są w systemie znak-moduł, w cesze w systemie uzupełnieniowym. W standardzie nie koduje się cechy i mantysy na pełnych bajtach, a jedynie na poszczególnych bitach ver. 2.2 Wielkości liczbowe (11/11)