Informatyka 1 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr II, studia niestacjonarne I stopnia (zaoczne) Rok akademicki 2007/2008 Wykład nr 5 (13.04.2008) dr inŜ. Jarosław Forenc Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc Plan wykładu nr 5 Arytmetyka liczb binarnych Arytmetyka w kodzie U2 Zapis zmiennoprzecinkowy liczby rzeczywistej Arytmetyka liczb zmiennoprzecinkowych Zapis liczb zmiennoprzecinkowych w systemie binarnym Standard IEEE 754 2/53 Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 3/53 Arytmetyka liczb binarnych - dodawanie Operacja dodawania jest wykonywana podobnie jak w systemie dziesiętnym Podstawowe operacje przy dodawaniu mają postać przedstawioną w tabeli Dodatkowo naleŜy pamiętać, Ŝe: 1( 2 ) + 1( 2) + 1( 2) = 11( 2) Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 4/53 Arytmetyka liczb binarnych - dodawanie Przykłady: 4 (10) + 7 (10) = 11(10) przy dodawaniu 1 + 1 następuje przeniesienie do następnej kolumny w bieŜącej kolumnie zapisujemy 0, a 1 dodajemy w następnej kolumnie 14(10) + 7 (10) = 21(10) jeśli przy dodawaniu 1 + 1 występuje dodatkowo przeniesienie z poprzedniej kolumny, to w bieŜącej kolumnie zapisujemy 1 oraz dodajemy 1 w następnej kolumnie Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 5/53 Arytmetyka liczb binarnych - dodawanie W pamięci komputera liczby binarne mają ściśle określony rozmiar: 1, 2 lub 4 bajty Jeśli wynik sumowania, np. dwóch liczb 8-bitowych jest większy od 8 bitów, to najstarszy bit zostaje utracony i otrzymany wynik jest nieprawidłowy Sytuacja taka nazywana jest nadmiarem (ang. overflow) Przykład: 255(10) + 1(10) = 256(10) +1 +1 +1 +1 +1 +1 +1 +1 + 1 1 1 1 1 1 1 1 1 255(10) 0 0 0 0 0 0 0 1 1(10) 0 0 0 0 0 0 0 0 0(10) Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 6/53 Arytmetyka liczb binarnych - odejmowanie Podstawowe operacje przy odejmowaniu mają postać przedstawioną w tabeli a b a-b 0 0 0 0 1 1 1 0 1 1 1 0 + poŜyczka do następnej pozycji Przy odejmowaniu 0 - 1 otrzymywany jest wynik 1 i poŜyczka do następnej pozycji PoŜyczka wymaga odjęcia wartości 1 od wyniku odejmowania cyfr w następnej kolumnie Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 7/53 Arytmetyka liczb binarnych - odejmowanie Przykłady: 15(10) − 5(10) = 10(10) 10(10) − 6(10) = 4(10) Bardzo często odejmowanie jest realizowane przez dodanie ze znakiem przeciwnym odjemnika do odjemnej a − b = a + ( − b) − a − b = ( −a ) + ( − b ) Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc Arytmetyka liczb binarnych - odejmowanie Jeśli od liczby mniejszej odejmiemy większą to wynik będzie ujemny, a w kodzie NKB nie moŜna zapisywać liczb ujemnych Podczas operacji odejmowania moŜe wystąpić konieczność poŜyczki, w sytuacji, gdy skończą się juŜ liczby Problem ten nazywa się niedomiarem (ang. underflow) Przykład: 0(10) − 1(10) = −1(10) 8/53 Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 9/53 Arytmetyka liczb binarnych - mnoŜenie Zasady mnoŜenia są identyczne jak w systemie dziesiętnym Podstawowe operacje przy mnoŜeniu mają postać przedstawioną w tabeli WymnaŜamy przez siebie kolejne cyfry mnoŜnej i mnoŜnika, a iloczyny częściowe dodajemy Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 10/53 Arytmetyka liczb binarnych - mnoŜenie Przykład: 7 (10) ⋅ 5(10) = 35(10) w mnoŜeniu uczestniczy tylko cyfra 1 dla cyfry 0 wynik jest zerowy i moŜna go pominąć Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 11/53 Arytmetyka liczb binarnych - dzielenie Algorytmy dzielenia są najbardziej skomplikowane - najprostszą postać ma algorytm dzielenia taki sam jak w przypadku systemu dziesiętnego Algorytm ten polega na polega na cyklicznym odejmowaniu odpowiednio przesuniętego dzielnika od dzielnej Przykład: 11(10) : 2(10) = 5(10) r. 1(10) Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 12/53 Reprezentacja liczb ze znakiem - kod U2 - dodawanie Dodawanie liczb w kodzie U2 odbywa się standardową metodą - traktujemy liczby jako zwykłe liczby binarne (dodatnie), dodajemy je otrzymując wynik w kodzie U2 W operacji dodawania bierze udział takŜe bit znaku, a przeniesienie poza najstarszy bit znaku jest ignorowane Przykłady: 3(10) + 5(10) = 8(10) +1 +1 3(10) + (−5) (10) = −2(10) +1 0 0 1 1( U 2 ) → 3(10) 0 0 1 1( U 2 ) → 3(10) + 0 1 0 1( U 2 ) → 5(10) 1 0 0 0 ( U 2 ) → 8(10) + 1 0 1 1( U 2 ) → − 5(10) 1 1 1 0( U 2 ) → − 2(10) Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 13/53 Reprezentacja liczb ze znakiem - kod U2 - dodawanie Przykłady: − 5(10) + (−2) (10) = −7 (10) +1 +1 +1 1 0 1 1( U 2 ) → − 5(10) + 1 1 1 0( U 2) → − 2(10) 1 1 0 0 1( U 2 ) → − 7 (10) ignorujemy przeniesienie dodawanie dowolnych liczb w kodzie U2 daje poprawny wynik zawsze wtedy, gdy mieści się on w zakresie liczb dla danego formatu Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 14/53 Reprezentacja liczb ze znakiem - kod U2 - odejmowanie Odejmowanie odbywa się według tych samych zasad jak w NKB Przykłady: 5(10) − 3(10) = 2(10) −1 0 1 0 1( U 2 ) → 5(10) − 0 0 1 1( U 2 ) → 3(10) 0 0 1 0( U 2) → 2 (10) − 3(10) − 5(10) = −8(10) 1 1 0 1( U 2 ) → − 3(10) − 0 1 0 1( U 2 ) → 5(10) 1 0 0 0( U 2) → − 8(10) Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 15/53 Reprezentacja liczb ze znakiem - kod U2 - mnoŜenie MnoŜenie liczb w kodzie U2 wykonywane jest w inny sposób niŜ standardowe mnoŜenie w kodzie NKB Przed wykonaniem mnoŜenia naleŜy rozszerzyć znakowo obie mnoŜone liczby tak, aby ich liczba bitów wzrosła dwukrotnie (bit znaku jest powielany), np. 5(10) = 0.101( U 2) 5(10) = 0.000 0101( U 2) − 5(10) = 1.011( U 2) − 5(10) = 1.111 1011( U 2 ) Po wykonaniu rozszerzenia znakowego liczby są mnoŜone standardowo Otrzymywany wynik powinien być liczbą o długości równej sumie długości mnoŜonych liczb - z tego powodu bity wykraczające poza tę długość są ignorowane Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 16/53 Reprezentacja liczb ze znakiem - kod U2 - mnoŜenie Przykład: − 2(10) ⋅ 3(10) = −6(10) − 2 (10) → 1110( U 2 ) ie znakowe rozszerzen → 1111 1110( U 2 ) 3(10) → 0011( U 2 ) ie znakowe rozszerzen → 0000 0011( U 2 ) 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 0 1 1 1 1 1 0 1 . (U2) -2(10) (U2) 3(10) (U2) -6(10) + 1 ignorujemy 0 Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 17/53 Reprezentacja liczb ze znakiem - kod U2 - dzielenie Najprostsza metoda dzielenia w U2 składa się z następujących kroków: zapamiętanie znaków dzielonych liczb zamiana liczb ujemnych na dodatnie wykonanie dzielenia dla liczb naturalnych zmiana znaku wyniku, jeśli znak dzielnej i dzielnika róŜnią się Podczas dzielenia znaki wyniku i reszty przyjmują wartości przedstawione w tabeli Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc Reprezentacja liczb ze znakiem - kod U2 - dzielenie Przykład: 6(10) : (−3) (10) = −2 (10) 6(10) → 0110( U 2 ) − 3(10) → 1101( U 2 ) dodatnia liczba → 3(10) → 0011( U 2 ) 18/53 Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc Reprezentacja liczb ze znakiem - porównanie kodów Porównanie interpretacji wartości słów kodu binarnego w róŜnych systemach zapisu liczb ze znakiem - liczba dodatnia - liczba ujemna - zero 19/53 Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc Zapis zmiennoprzecinkowy liczby rzeczywistej Zapis bardzo duŜych lub bardzo małych liczb w normalnej notacji pozycyjnej jest niewygodny gdyŜ wymaga duŜej ilości cyfr, np. dwanaście bilionów: 12 000 000 000 000 trzydzieści trylionów: 30 000 000 000 000 000 000 jedna bilionowa: 0,000 000 000 001 Znacznie prostsze jest przedstawienie powyŜszych liczb w postaci zmiennoprzecinkowej (ang. floating point numbers) 12 000 000 000 000 = 1,21013 30 000 000 000 000 000 000 = 3,01019 0,000 000 000 001 = 1,010-12 PowyŜszy zapis nazywamy takŜe zapisem w postaci wykładniczej lub teŜ notacją naukową 20/53 Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc Zapis zmiennoprzecinkowy liczby rzeczywistej Zapis liczby zmiennoprzecinkowej ma postać: L = M ⋅ BE gdzie: L M B E - wartość liczby mantysa podstawa systemu wykładnik, cecha Przykład: 2,43 ⋅103(10) = 2,43 ⋅1000 = 2430(10) 21/53 Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc Zapis zmiennoprzecinkowy liczby rzeczywistej Przykłady: 1,011⋅10101( 2) = ?(10) M = 1,011( 2) = 1⋅ 2 0 + 0 ⋅ 2 −1 + 1 ⋅ 2 −2 + 1 ⋅ 2 −3 = 1 + 0,25 + 0,125 = 1,375(10) B = 10( 2) = 0 ⋅ 20 + 1 ⋅ 21 = 2 (10) E = 101( 2) = 1 ⋅ 2 0 + 0 ⋅ 21 + 1 ⋅ 2 2 = 1 + 4 = 5(10) 1,011⋅10101( 2) = 1,375 ⋅ 25 = 1,375 ⋅ 32 = 44(10) 3,121⋅1032 ( 4) = ?(10) M = 3,121( 4) = 3 ⋅ 4 0 + 1⋅ 4 −1 + 2 ⋅ 4 − 2 + 1 ⋅ 4 −3 = 3,390625(10) B = 10( 4) = 0 ⋅ 40 + 1 ⋅ 41 = 4 (10) E = 32( 4) = 2 ⋅ 40 + 3 ⋅ 41 = 2 + 12 = 14(10) 3,121⋅1032 ( 4) = 3,390625 ⋅ 414 = 910 163 968(10) 22/53 Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 23/53 Zapis zmiennoprzecinkowy liczby rzeczywistej PołoŜenie przecinka w mantysie nie jest ustalone i moŜe się zmieniać PoniŜsze zapisy oznaczają tę samą liczbę 243101 = 24,3102 = 2,43103 = 0,243104 Dla ujednolicenia zapisu przyjęto tzw. postać znormalizowaną zapisu liczby, w której mantysa spełnia nierówność: B > M ≥1 Przykład: 2,43103 - postać znormalizowana, gdyŜ: 10 > | 2,43 | ≥ 1 0,243104 - to nie jest postać znormalizowana 2,43102 - to nie jest postać znormalizowana Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 24/53 Zapis zmiennoprzecinkowy liczby rzeczywistej Jak zapisać liczbę w postaci zmiennoprzecinkowej? Przykład: 1523,169(10) zapisujemy mantysę przy wykładniku równym zero 1523,169 ⋅100 (10) normalizujemy mantysę modyfikując wykładnik liczby 1,523169 ⋅103(10) dodatkowo moŜe nastąpić obcięcie (ang. truncate) albo zaokrąglenie (ang. round) mantysy do zadanej ilości cyfr, np. - obcięcie: 1,5231⋅10 3 (10 ) - zaokrąglenie: 1,5232 ⋅103(10) Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 25/53 Arytmetyka zmiennoprzecinkowa W arytmetyce zmiennoprzecinkowej kolejność wykonywania operacji ma wpływ na końcowy wynik arytmetyka zmiennoprzecinkowa nie jest łączna ( x + y) + z ≠ x + ( y + z ) ( x ⋅ y) ⋅ z ≠ x ⋅ ( y ⋅ z ) arytmetyka zmiennoprzecinkowa nie jest rozdzielna x ⋅ ( y + z) ≠ ( x ⋅ y ) + ( x ⋅ z ) Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 26/53 Arytmetyka liczb zmiennoprzecinkowych Dodawanie i odejmowanie: załóŜmy, Ŝe mamy dwie liczby zmiennoprzecinkowe: L1 = M1 ⋅ B E1 L 2 = M 2 ⋅ BE 2 zakładając, Ŝe E1 < E2, suma (róŜnica) liczb ma postać: L1 ± L 2 = (M1 ± M 2 ⋅ BE 2 −E1 ) ⋅ BE1 14243 wyrównanie wykladników mantysa sumy (róŜnicy) liczb jest sumą (róŜnicą) mantys liczb wyjściowych sprowadzeniu ich do wspólnego wykładnika (jest to tzw. wyrównanie wykładników liczb zmiennoprzecinkowych lub denormalizacja) wykładnik sumy (róŜnicy) jest równy wykładnikowi dodawanych (odejmowanych) liczb po wyrównaniu po wykonaniu operacji arytmetycznej mantysa wyniku jest normalizowana Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 Arytmetyka liczb zmiennoprzecinkowych Przykład - dodawanie: obliczamy sumę dwóch liczb zmiennoprzecinkowych: L1 = M1 ⋅ BE1 = 1,5 ⋅101 L 2 = M 2 ⋅ B E 2 = 2,5 ⋅10 2 wzór ogólny: L1 + L 2 = (M1 + M 2 ⋅ BE 2 −E1 ) ⋅ BE1 obliczenia: L1 + L 2 = (1,5 + 2,5 ⋅10 2 −1 ) ⋅101 L1 + L 2 = (1,5 + 2,5 ⋅101 ) ⋅101 L1 + L 2 = (1,5 + 25) ⋅101 L1 + L 2 = 26,5 ⋅101 normalizacja: L1 + L 2 = 26,5 ⋅101 = 2,65 ⋅10 2 dr inŜ. Jarosław Forenc 27/53 Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 28/53 Arytmetyka liczb zmiennoprzecinkowych MnoŜenie: iloczyn liczb L1 i L2 ma postać: L1 ⋅ L 2 = (M1 ⋅ M 2 ) ⋅ B E1 + E 2 mantysa iloczynu jest iloczynem mantys, zaś wykładnik iloczynu jest sumą wykładników po wykonaniu operacji arytmetycznej mantysa wyniku jest normalizowana Dzielenie: iloraz liczb L1 i L2 ma postać: L1 / L 2 = (M1 / M 2 ) ⋅ BE1 − E 2 mantysa ilorazu jest ilorazem mantys, zaś wykładnik ilorazu jest róŜnicą wykładników po wykonaniu operacji arytmetycznej mantysa wyniku jest normalizowana Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 29/53 Zapis liczb zmiennoprzecinkowych w systemie binarnym W praktycznych realizacjach zapisu liczb zmiennoprzecinkowych przyjmuje się ograniczony zakres na mantysę i cechę Z powyŜszego powodu liczba w zapisie zmiennoprzecinkowym jest określona z pewną dokładnością i moŜe występować tylko w określonym zakresie Zakodowana liczba zmiennoprzecinkowa ma postać: Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 30/53 Zapis liczb zmiennoprzecinkowych w systemie binarnym Wartość liczby obliczana jest ze wzoru: L = S ⋅ M ⋅ BE gdzie: L S M B E - wartość liczby znak liczby (ang. sign), przyjmuje wartość 1 lub -1 znormalizowana mantysa (ang. mantissa), liczba ułamkowa podstawa systemu liczbowego (ang. base) wykładnik (ang. exponent), cecha, liczba całkowita W systemie binarnym podstawa systemu jest stała: B = 2 L = S ⋅ M ⋅ 2E Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 31/53 Zakres liczb zmiennoprzecinkowych ZałóŜmy, Ŝe liczba składa się z: m - cyfr przeznaczonych na mantysę n+1 - cyfr przeznaczonych na wykładnik (n - cyfr wartości i 1 cyfry znaku) 1 - cyfry znaku całej liczby Wartości minimalne i maksymalne: wykładnik: E min = −B n + 1 E max = B n − 1 mantysa: M min = 1 M max = B − B −( m −1) Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 32/53 Zakres liczb zmiennoprzecinkowych Wartości minimalne i maksymalne: wykładnik: E min = −B n + 1 E max = B n − 1 mantysa: M min = 1 M max = B − B −( m −1) W takim przypadku najmniejsza i największa wartość moŜliwa do zapisania w tej reprezentacji wynoszą: x min = M min ⋅ BE min = 1⋅ B E min x max = M max ⋅ B E max = (B − B −( m −1) ) ⋅ BE max Natomiast zakres liczb, które mogą być reprezentowane w danym zapisie: − x max ,− x min ∪ { 0 } ∪ x min , x max Zero jest wartością specjalną, która nie jest bezpośrednio reprezentowana w tym zapisie Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 33/53 Zakres liczb zmiennoprzecinkowych Przykład - liczba 32-bitowa: E min = −B n + 1 = −2 7 + 1 = −127 E max = B n − 1 = 27 − 1 = 127 x min = 1 ⋅ BE min = 2 −127 = 5,88 ⋅10 −39 x max = (B − B− ( m −1) ) ⋅ BE max = (2 − 2 −( 23−1) ) ⋅ 2127 = 2128 − 2105 = 3,4 ⋅1038 − 3,4 ⋅1038 , − 5,88 ⋅10 −39 ∪ { 0 } ∪ 5,88 ⋅10 −39 , 3,4 ⋅1038 Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 34/53 Liczby zmiennoprzecinkowe - przesunięcie wykładnika W celu uniknięcia konieczności kodowania znaku wykładnika jest on zapisywany jako wartość przesunięta o pewną stałą (ang. biased exponent) - zapis wykładnika z nadmiarem, z przesuniętym wykładnikiem Właściwą wartość wykładnika otrzymuje się poprzez odjęcie od zakodowanego wykładnika wartości przesunięcia (ang. bias) Wartość liczby zmiennoprzecinkowej oblicza się zatem ze wzoru: L = (−1)S ⋅ M ⋅ 2 E −BIAS gdzie: L - wartość liczby E - wykładnik S - znak liczby M - mantysa BIAS - przesunięcie (nadmiar) Typowe wartości przesunięcia wynoszą: dla formatu 32-bitowego: 127(10) = 7F(16) dla formatu 64-bitowego: 1023(10) = 3FF(16) dla formatu 80-bitowego: 16383(10) = 3FFF(16) Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc Standard IEEE 754 W celu ujednolicenia operacji na liczbach zmiennoprzecinkowych na róŜnych platformach sprzętowych opracowano odpowiedni standard IEEE 754 Pełna nazwa standardu to: IEEE Standard for Binary Floating-Point Arithmetic (ANSI/IEE Std 754-1985) Obecnie praktycznie wszystkie implementacje sprzętowe liczb zmiennoprzecinkowych oparte są o ten standard Standard IEEE 754 definiuje dwie podstawowe klasy liczb zmiennoprzecinkowych: pojedynczej precyzji (ang. single-precision) - liczby 32-bitowe podwójnej precyzji (ang. double-precision) - liczby 64-bitowe 35/53 Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc Standard IEEE 754 W standardzie IEEE 754 zdefiniowane zostały takŜe inne klasy liczb zmiennoprzecinkowych: pojedynczej rozszerzonej precyzji (ang. single-extended precision) - liczby ≥ 43-bitowe, nie są powszechnie stosowane podwójnej rozszerzonej precyzji (ang. double-extended precision) - liczby ≥ 79-bitowe, zazwyczaj implementowane jako 80-bitowe Standard IEEE 754 definiuje nie tylko sposób reprezentacji liczb, ale takŜe: sposób reprezentacji specjalnych wartości, np. nieskończoności, zera sposób wykonywania działań na liczbach zmiennoprzecinkowych sposób zaokrąglania liczb 36/53 Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 37/53 Standard IEEE 754 - liczby 32-bitowe Liczba pojedynczej precyzji przechowywana jest na 32 bitach: Pierwszy bit w zapisie (bit nr 31) jest bitem znaku (0 - liczba dodatnia, 1 - liczba ujemna) Wykładnik zapisywany jest na 8 bitach (bity nr 30-23) z nadmiarem (przesunięciem wykładnika) o wartości 127 Wykładnik moŜe przyjmować wartości od -127 (wszystkie bity wyzerowane) do 128 (wszystkie bity ustawione na 1) Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 38/53 Standard IEEE 754 - liczby 32-bitowe Liczba pojedynczej precyzji przechowywana jest na 32 bitach: Mantysa zapisywana jest na 23 bitach w stałoprzecinkowym kodzie U1 W większości przypadków mantysa jest znormalizowana Wartość mantysy zawiera się pomiędzy 1 a 2, a zatem w zapisie liczby pierwszy bit jest zawsze równy 1 PowyŜszy bit nie jest zapamiętywany, natomiast jest automatycznie uwzględniany podczas wykonywania obliczeń Dzięki pominięciu tego bitu zyskujemy dodatkowy bit mantysy (zamiast 23 bitów mamy 24 bity) Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 39/53 Standard IEEE 754 - liczby 32-bitowe Przykład: obliczmy wartość dziesiętną liczby zmiennoprzecinkowej 01000010110010000000000000000000( IEEE 754) = ?(10 ) dzielimy liczbę na części 0{ S − bit znaku 10000101 0000000000 1424 3 1001000000 144444 24444000 4 3 E − wykladnik M − mantysa ( tylko czesc ulamkowa ) określamy znak liczby S = 0 − liczba dodatnia obliczamy wykładnik pamiętając, Ŝe w reprezentacji 32-bitowej nadmiar wynosi 127 E = 10000101( 2 ) = 128 + 4 + 1 = 133 − 127 { = 6(10) nadmiar Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 40/53 Standard IEEE 754 - liczby 32-bitowe Przykład (cd.): wyznaczamy mantysę dopisując na początku 01 (0 - znak liczby w kodzie U1, 1 - część całkowita) i stawiając przecinek M = 01,10010000000000000000000( U1) = = 1⋅ 20 + 1⋅ 2 −1 + 1⋅ 2 −4 = 1 + 0,5 + 0,0625 = 1,5625(10) wartość dziesiętną liczby zmiennoprzecinkowej obliczamy według wzoru: L = (−1)S ⋅ M ⋅ 2 E podstawiając otrzymujemy: S = 0, E = 6(10) , M = 1,5625(10) L = (−1)0 ⋅1,5625 ⋅ 26 = 100 (10) 01000010110010000000000000000000( IEEE 754) = 100(10) Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 41/53 Standard IEEE 754 - liczby 32-bitowe Przykład: obliczmy wartość dziesiętną liczby zmiennoprzecinkowej 11000011111010000000000000000000( IEEE 754) = ?(10) dzielimy liczbę na części 1{ S − bit znaku 10000111 0000000000 1424 3 1101000000 144444 24444000 4 3 E − wykladnik M − mantysa ( tylko czesc ulamkowa ) określamy znak liczby S = 1 − liczba ujemna obliczamy wykładnik pamiętając, Ŝe w reprezentacji 32-bitowej nadmiar wynosi 127 E = 10000111( 2 ) = 128 + 4 + 2 + 1 = 135 − 127 { = 8(10) nadmiar Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 42/53 Standard IEEE 754 - liczby 32-bitowe Przykład (cd.): wyznaczamy mantysę dopisując na początku 01 (0 - znak liczby w kodzie U1, 1 - część całkowita) i stawiając przecinek M = 01,11010000000000000000000( U1) = = 1⋅ 20 + 1⋅ 2 −1 + 1 ⋅ 2 −2 + 1⋅ 2 −4 = 1 + 0,5 + 0,25 + 0,0625 = 1,8125(10) wartość dziesiętną liczby zmiennoprzecinkowej obliczamy według wzoru: L = (−1)S ⋅ M ⋅ 2 E podstawiając otrzymujemy: S = 0, E = 8(10) , M = 1,8125(10) L = (−1)1 ⋅1,8125 ⋅ 28 = −464(10) 11000011111010000000000000000000( IEEE 754) = −464(10) Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 43/53 Standard IEEE 754 - liczby 64-bitowe Liczba podwójnej precyzji przechowywana jest na 64 bitach: Pierwszy bit w zapisie (bit nr 63) jest bitem znaku (0 - liczba dodatnia, 1 - liczba ujemna) Wykładnik zapisywany jest na 11 bitach (bity nr 62-52) z nadmiarem (przesunięciem wykładnika) o wartości 1024 Wykładnik moŜe przyjmować wartości od -1023 (wszystkie bity wyzerowane) do 1024 (wszystkie bity ustawione na 1) Mantysa zapisywana jest na 52 bitach w stałoprzecinkowym kodzie U1 Podobnie jak w liczbie pojedynczej precyzji, pierwszy bit mantysy, zawsze równy 1, nie jest zapamiętywany Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 44/53 Standard IEEE 754 - zakres i precyzja liczb Zakres liczb zmiennoprzecinkowych pojedynczej precyzji: − 3,4 ⋅1038 ... 3,4 ⋅1038 Zakres liczb zmiennoprzecinkowych podwójnej precyzji: − 1,8 ⋅10308 ... 1,8 ⋅10308 Precyzję podaje się najczęściej jako przybliŜoną ilość dziesiętnych cyfr znaczących, precyzja zaleŜna jest od liczby bitów mantysy Liczba zmiennoprzecinkowa pojedynczej precyzji ma 7 cyfr dziesiętnych Liczba zmiennoprzecinkowa podwójnej precyzji ma 15-16 cyfr dziesiętnych Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 45/53 Standard IEEE 754 - wartości specjalne Oprócz zwykłych liczb w standardzie IEEE 754 zdefiniowano kilka wartości specjalnych Zero bit znaku moŜe przyjmować dowolną wartość, a zatem moŜna otrzymać zero dodatnie lub zero ujemne - zero dodatnie - zero ujemne wszystkie bity wykładnika i mantysy są równe zeru przy porównaniach zero dodatnie i ujemne są traktowane jako równe sobie Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 46/53 Standard IEEE 754 - wartości specjalne Nieskończoność bit znaku określa czy mamy nieskończoność dodatnią czy ujemną - nieskończoność dodatnia - nieskończoność ujemna wszystkie bity wykładnika są równe jeden, zaś wszystkie bity mantysy - zero nieskończoność występuje w przypadku wystąpienia nadmiaru (przepełnienia) oraz przy dzieleniu przez zero Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 47/53 Standard IEEE 754 - wartości specjalne Liczba zdenormalizowana bit znaku moŜe być równy zero lub jeden, wszystkie bity wykładnika są równe zeru, zaś bity mantysy przyjmują dowolne wartości pojawia się, gdy występuje niedomiar (ang. underflow), ale wynik operacji moŜna jeszcze zapisać denormalizując mantysę w takim przypadku mantysa nie posiada domyślnej części całkowitej równej 1, tzn. reprezentuje liczbę o postaci 0,xxx…xxx, a nie 1,xxx…xxx Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc Standard IEEE 754 - wartości specjalne Nieliczby w standardzie IEEE 754 zdefiniowane są dwie specjalne wartości, które nie reprezentują wartości liczbowej wartości te nazywane są NaN (ang. Not A Number - nie liczba) powstają zazwyczaj w wyniku niedozwolonej operacji, np. (obliczanie pierwiastka z liczby ujemnej) wyróŜnia się dwa rodzaje nieliczb: QNaN i SNaN QNaN (ang. Quiet NaN) - ciche nieliczby ciche nieliczby „przechodzą” przez działania arytmetyczne najczęściej oznaczają wartość niezdefiniowaną ich wystąpienie nie powoduje wyjątku 48/53 Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 49/53 Standard IEEE 754 - wartości specjalne Nieliczby (cd.) SNaN (ang. Significant NaN) - istotne, głośne nieliczby powodują powstanie wyjątków w operacjach arytmetycznych i przerwanie obliczeń najczęściej oznaczają wartość niedozwoloną Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 50/53 Standard IEEE 754 - operacje z wartościami specjalnymi Standard IEEE 754 definiuje dokładnie wyniki operacji, w których występują specjalne argumenty Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 51/53 Język C - operacje z wartościami specjalnymi 1.0/0.0 -1.0/0.0 0.0/0.0 sqrt(-1.0) 1.0/INF 0*INF #include <stdio.h> #include <stdlib.h> #include <math.h> int main() { printf("1.0/0.0 printf("-1.0/0.0 printf("0.0/0.0 printf("sqrt(-1.0) printf("1.0/INF printf("0*INF system("pause"); return 0; } = = = = = = %f\n",1.0/0.0); %f\n",-1.0/0.0); %f\n",0.0/0.0); %f\n",sqrt(-1.0)); %f\n",1.0/(1.0/0.0)); %f\n",0.0*(1.0/0.0)); = = = = = = 1.#INF00 -1.#INF00 -1.#IND00 -1.#IND00 0.000000 -1.#IND00 Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 52/53 Język C - reprezentacja liczb zmiennoprzecinkowych Typy zmiennoprzecinkowe w języku C: Nazwa typu Rozmiar (bajty) Zakres wartości Cyfry znaczące float 4 bajty -3,4⋅10-38 … 3,4⋅1038 7-8 double 8 bajtów -1,7⋅10-308 … 1,7⋅10308 15-16 long double 12 bajtów PowyŜsze rozmiary podane zostały dla kompilatora Dev-C++ Typ long double moŜe mieć takŜe inny rozmiar: Kompilator Rozmiar (bajty) MS Visual C++6.0 Borland C++ 3.1 8 bajtów 10 bajtów Borland C++ Builder 6 Dev-C++ 10 bajtów 12 bajtów Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc Koniec wykładu nr 5 Dziękuję za uwagę! 53/53 Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 54/53 Źródła (KsiąŜki): Biernat J.: „Architektura komputerów”. Oficyna Wydawnicza Politechniki Wrocławskiej, Wrocław, 2005 - Rozdz. 4.2. Kodowanie i formaty danych uŜytkowych (str. 68-78) Kincaid D., Cheney W.: „Analiza numeryczna”. WNT, Warszawa, 2006 - Rozdz. 2. Arytmetyka komputerowa (str. 33-51) Ogrodzki J.: „Wstęp do systemów komputerowych”. Oficyna Wydawnicza Politechniki Warszawskiej, Warszawa, 2002 - Rozdz. 3.2. Arytmetyka stałoprzecinkowa (str. 49-60) Stallings W.: „Organizacja i architektura systemu komputerowego. Projektowanie systemu a jego wydajność”. WNT, Warszawa, 2004 - Rozdz. 8.3. Arytmetyka liczb całkowitych (str. 327-342) Wojtuszkiewicz K.: „Urządzenia techniki komputerowej. Część 1. Jak działa komputer?”. PWN, Warszawa, 2007 - Rozdz. 2.2.1. Arytmetyka dwójkowa (str. 45-56) Biernat J.: „Metody i układy arytmetyki komputerowej”. Oficyna Wydawnicza Politechniki Wrocławskiej, Wrocław, 2001 - Rozdz. 2.6. Reprezentacje zmiennoprzecinkowe (str. 33-38) Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 55/53 Źródła (KsiąŜki): Ogrodzki J.: „Wstęp do systemów komputerowych”. Oficyna Wydawnicza Politechniki Warszawskiej, Warszawa, 2002 - Rozdz. 4.1. Liczby zmiennoprzecinkowe i operacje na nich (str. 61-64) Pochopień B.: „Arytmetyka systemów cyfrowych”. Wydawnictwo Politechniki Śląskiej, Gliwice, 2000 - Rozdz. 2.3. Format zmiennoprzecinkowy (str. 63-67) Stallings W.: „Organizacja i architektura systemu komputerowego. Projektowanie systemu a jego wydajność”. WNT, Warszawa, 2004 - Rozdz. 8.4. Reprezentacja zmiennopozycyjna (str. 342-349) Biernat J.: „Architektura komputerów”. Oficyna Wydawnicza Politechniki Wrocławskiej, Wrocław, 2005 - Rozdz. 5.3. Arytmetyka zmiennoprzecinkowa (str. 95-100) Biernat J.: „Metody i układy arytmetyki komputerowej”. Oficyna Wydawnicza Politechniki Wrocławskiej, Wrocław, 2001 - Rozdz. 3.6. Działania zmiennoprzecinkowe (str. 57-62) Pochopień B.: „Arytmetyka systemów cyfrowych”. Wydawnictwo Politechniki Śląskiej, Gliwice, 2000 - Rozdz. 5. Arytmetyka liczb zmiennoprzecinkowych (str. 117-125) Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 56/53 Źródła (KsiąŜki): Stallings W.: „Organizacja i architektura systemu komputerowego. Projektowanie systemu a jego wydajność”. WNT, Warszawa, 2004 - Rozdz. 8.3. Arytmetyka zmiennopozycyjna (str. 349-359) Tanenbaum A.S.: „Strukturalna organizacja systemów komputerowych”. Helion, Gliwice, 2006 - Rozdz. B1. Zasady arytmetyki zmiennoprzecinkowej (str. 741-745) Biernat J.: „Metody i układy arytmetyki komputerowej”. Oficyna Wydawnicza Politechniki Wrocławskiej, Wrocław, 2001 - Rozdz. D1. Standardy zmiennoprzecinkowe IEEE 754/854 (str. 57-62) Tanenbaum A.S.: „Strukturalna organizacja systemów komputerowych”. Helion, Gliwice, 2006 - Rozdz. B2. Standard arytmetyki zmiennoprzecinkowej IEEE-754 (str. 745-748) Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 57/53 Źródła (Internet): http://www.i-lo.tarnow.pl/edu/inf/alg/num/pages/012.php - Naturalny kod binarny: operacje arytmetyczne w systemie dwójkowym http://www.i-lo.tarnow.pl/edu/inf/alg/num/pages/018.php - Kodowanie liczb ze znakiem: zapis uzupełnień do 2 - U2 http://pl.wikipedia.org/wiki/Kod_uzupe%C5%82nie%C5%84_do_dw%C3%B3ch Kod uzupełnień do dwóch http://en.wikipedia.org/wiki/Two%27s_complement - Two’s complement http://www.i-lo.tarnow.pl/edu/inf/alg/num/pages/020.php - Kodowanie liczb ze znakiem: podsumowanie systemów dwójkowych http://pl.wikipedia.org/wiki/Liczba_zmiennoprzecinkowa - Liczba zmiennoprzecinkowa http://www.i-lo.tarnow.pl/edu/inf/alg/num/pages/008.php - Liczbowe systemy pozycyjne: zapis zmiennoprzecinkowy http://www.i-lo.tarnow.pl/edu/inf/alg/num/pages/021.php - Dwójkowe liczby zmiennoprzecinkowe: przykładowy system zmiennoprzecinkowy Informatyka 1, studia niestacjonarne I stopnia Rok akademicki 2007/2008, Wykład nr 5 dr inŜ. Jarosław Forenc 58/53 Źródła (Internet): http://en.wikipedia.org/wiki/IEEE_754 - IEEE 754-1985 http://pl.wikipedia.org/wiki/IEEE_754 - IEEE 754 http://www.i-lo.tarnow.pl/edu/inf/alg/num/pages/022.php - Dwójkowe liczby zmiennoprzecinkowe: standard IEEE 754