Dr inż. Grażyna KRUPIŃSKA Grazyna.Krupinska@fis.agh.edu.pl D-10 pokój 227 WYKŁAD 2 WSTĘP DO INFORMATYKI
Ćwiczenia i laboratorium 2 Kolokwia zaliczeniowe - 1 termin - poniedziałek, 29 stycznia 2018 11:30 13:30 sala A, B 2 termin - poniedziałek, 12 lutego 2018 09:30 11:30 sala A
Liczby stałoprzecinkowe 3 Do zapisu przeznaczona jest z góry określona ilość bitów. Pozycję przecinka ustala się arbitralnie, w zależności od wymaganej dokładności. Wartość liczby stałoprzecinkowej jest równa sumie iloczynów jej cyfr przez wagi pozycji tych cyfr. 1 n m i i c i p m n n c c c c c c c c...,... 2 1 0 1 2 2 1 m m n n p c p c p c p c p c p c...... 2 2 1 1 0 0 1 1 1 1
Liczby stałoprzecinkowe 4 213,132 (4) 213,132 (4) = 2 4 2 + 1 4 1 + 3 4 0 + 1 4-1 + 3 4-2 + 2 4-3 213,132 (4) = 2 16 + 1 4 + 3 1 + 1 1 / 4 + 3 1 / 16 + 2 1 / 64 213,132 (4) = 32 + 4 + 3 + 1 / 4 + 3 / 16 + 2 / 64 213,132 (4) = 39 + 16 / 64 + 12 / 64 + 2 / 64 213,132 (4) = 39 30 / 64
Liczby stałoprzecinkowe 5 Zakres liczb o n bitach części całkowitej i m bitach części ułamkowej. C max = 2 n 1 L max = C max + U max U max = 1 2-1 + 1 2-2 + 1 2-3 +... + 1 2 -m U max = 1 / 2 + 1 / 4 = 1-1 / 4 U max = 1 / 2 + 1 / 4 + 1 / 8 = 1-1 / 8 U max = 1 / 2 + 1 / 4 + 1 / 8 +.. +... + 1 / 2 -m = 1-1 / 2 -m = (2 m - 1)/2 m 0, 2 n 1 + 2m 1 2 m
6 Dokładność reprezentacji stałoprzecinkowej Dla reprezentacji 4-bitowe części ułamkowej 0,0001 (2) = 0,0625 (10) 0,0010 (2) = 0,125 (10) 0,0011 (2) = 0,1875 (10) 0,0100 (2) = 0,25 (10).. 0,0111 (2) = 0,4375 (10) 0,1000 (2) = 0,5 (10) 0,1110 (2) = 0,875 (10) 0,1111 (2) = 0,9375 (10)
Liczby stałoprzecinkowe 7 Konwersja z systemu dziesiętnego na system dwójkowy Część ułamkowa : Dopóki nie otrzymamy w wyniku zera lub zakładanej dokładności część ułamkową mnożymy przez 2 część całkowitą wyniku jest kolejna cyfrą zapisu część ułamkowa przechodzi do następnego mnożenia Część całkowita jak w NCB
Liczby stałoprzecinkowe 8 Przeliczamy 2,21 (10) na system binarny do 4 miejsc po przecinku. 2,21 (10) = 2 (10) + 0,21 (10) 0,21 x 2 = 0,42 cyfra 0 0,42 x 2 = 0,84 cyfra 0 0,84 x 2 = 1,68 cyfra 1 0,68 x 2 = 1,36 cyfra 1 4 miejsca po przecinku 2,21 (10) 10 (2) + 0,0011 (2) = 2,1875 (10)
Liczby stałoprzecinkowe 9 Przeliczamy 1/10 (10) na system binarny do 8 miejsc po przecinku. 1 / 10 x 2 8 = 1 / 10 x 256 = 256 / 10 25 25 / 2 = 12 r 1 12 / 2 = 6 r 0 6 / 2 = 3 r 0 3 / 2 = 1 r 1 1 / 2 = 0 r 1 tutaj mnożyliśmy (zaokrąglamy do wartości całkowitej) tutaj dzielimy przesuwamy przecinek w systemie dwójkowym rozwinięcie wartości 1 / 10 1 / 10 =0, 00001101 (0,000110011001100110011... (2) )
Kodowanie liczb ze znakiem 10 Mamy z góry ustaloną liczbę cyfr używanych do zapisu wartości, np. 8, 16, 24, 32,... Najstarszy bit ma inne znaczenie niż reszta cyfr - pełni funkcję bitu znaku. Bit znaku równy 0 liczba jest dodatnia Bit znaku równy 1 liczba jest ujemna
Kod ZNAK-MODUŁ 11 Liczba ZM składa się z dwóch części 1. bitu znaku 2. bitów wartości liczby (modułu) w naturalnym kodzie dwójkowym NBC. c n c c c c 1 n 2... 2 1 0
Kod ZNAK-MODUŁ 12 Liczba ZM składa się z dwóch części 1. bitu znaku 2. bitów wartości liczby (modułu) w naturalnym kodzie dwójkowym NBC. bit znakowy c n c c c c 1 n 2... 2 1 0 moduł liczby
Kod ZNAK-MODUŁ 13 L ZM = (-1) bit znaku moduł liczby b n-1 b n-2...b 2 b 1 b 0 = (-1) b n-1 (b n-2 2 n-2 +... + b 2 2 2 + b 1 2 1 + b 0 2 0 )
Kod ZNAK-MODUŁ 14 Zakres n bitowej liczby w kodzie ZM [-2 n-1 + 1, 2 n-1 1] Liczba przeciwna w kodzie ZM powstaje przez zmianę bitu znakowego
15 Kod ZNAK-MODUŁ zamiana liczby dwójkowej na dziesiętną 0101 (z-m) = (-1 0 ) x (1 2 0 + 0 2 1 + 1 2 2 ) 0101 (z-m) = (-1 0 ) x (1 1 + 0 2 + 1 4) 0101 (z-m) = 1 ( 1+ 4) 0101 (z-m) = 5 (10) 1101 (z-m) = (-1 1 ) (1 2 0 + 0 2 1 + 1 2 2 ) 1101 (z-m) = (-1 1 ) (1 1 + 0 2 + 1 4) 1101 (z-m) = -1 (1 + 4) 1101 (z-m) = -5 (10)
16 Kod ZNAK-MODUŁ zamiana liczby dziesiętnej na dwójkową znajdujemy przedstawienie dwójkowe modułu tej wartości, uzupełniamy bity do zadanego formatu i dodajemy bit znaku liczba = -49 8 bitów 49 / 2 = 24 r 1 24 / 2 = 12 r 0 12 / 2 = 6 r 0 6 / 2 = 3 r 0 3 / 2 = 1 r 1 1 / 2 = 0 r 1 49 (10) = 0011 0001 (2) -49 (10) = 1011 0001 (2)
Kod ZNAK-MODUŁ 17 57 10 0 0 1 1 1 0 0 1 ZM +( -13 10 ) + 1 0 0 0 1 1 0 1 ZM -69 10 1 1 0 0 0 1 1 0 ZM 57 10 0 0 1 1 1 0 0 1 ZM -13 10-1 0 0 0 1 1 0 1 ZM 44 10 0 0 1 0 1 1 0 0 ZM
Kod ZNAK-MODUŁ 18 Reguły dodawania liczb w kodzie ZM wynik = a (ZM) + b (ZM) znak a (ZM) znak b (ZM) operacja znak wyniku 0 0 dodawanie modułów 0 1 1 dodawanie modułów 1 0 1 1 0 moduł większy - moduł mniejszy znak większego modułu
Kod ZNAK-MODUŁ 19 Reguły odejmowania liczb w kodzie ZM wynik = a (ZM) - b (ZM) znak a (ZM) znak b (ZM) operacja znak wyniku 0 1 1 0 dodawanie modułów dodawanie modułów 0 0 odejmowanie modułu mniejszego od 1 1 modułu większego 0 1 Znak a (ZM), jeśli moduł ten jest większy od modułu b (ZM). Inaczej znak
20 znak a (ZM) znak operacja znak wyniku b (ZM) Kod ZNAK-MODUŁ 0 1 1 0 0 0 1 1 dodawanie modułów dodawanie modułów odejmowanie modułu mniejszego od modułu większego 0 1 Znak a (ZM), jeśli moduł ten jest większy od modułu b (ZM). Inaczej znak przeciwny. 3-2 0 011-0 010 0 001 1 (-3) - (-4) 1 100-1 011 0 001 0 2 - (-3) 0 010 + 1 011 0 101 5 (-5) - 2 1 101 + 0 010 1 111 (-7)
21 Kod ZNAK-MODUŁ Zakres liczb reprezentowanych w n-bitowym kodzie Z-M [-2 n-1 +1, 2 n-1-1] Kod Z-M koncepcyjnie prosty, ale stwarza problemy przy wykonywaniu operacji arytmetycznych Niejednoznaczna wartość 0 - dwa słowa kodowe Bit znakowy ma zupełnie inne znaczenie niż pozostałe bity i nie uczestniczy w operacjach arytmetycznych
Kod ZNAK-MODUŁ 22 Stałoprzecinkowe liczby w kodzie ZM moduł liczby ZM to dwójkowa liczba stałoprzecinkowa. 1001,1101 (z-m) 1001,1101 (z-m) 001,1101 (2) = 1 13 / 16 1001,1101 (z-m) ) = - 1 13 / 16
Kod ZNAK-MODUŁ 23 Stałoprzecinkowe liczby w kodzie ZM moduł liczby ZM to dwójkowa liczba stałoprzecinkowa. -3,75 moduł = 3,75 3,75 (10) = 11,11 (2) Reprezentacja 8-mio bitowa znak + 7 bitów moduł (4 po przecinku) 11,11 = 011,1100-3,75 (10) = 1011,1100 (ZM)
24 System uzupełnień System uzupełnień do podstawy wymyślił Blaise Pascal. Aby umożliwić wykonywanie odejmowania, Pascal dodawał liczby uzupełnione do podstawy 10. 84-55 Uzupełnienie dziesiętne liczby 55 to 45 84 55 +100-100 = 84 + (100-55) -100 = 129-100 84 55 = 29
25 Kod uzupełnień do 1 (U1) 1. Wszystkie bity zapisu liczby posiadają swoje wagi. 2. Najstarszy bit jest bitem znaku i ma wagę równą (-2 n-1 +1) 3. Pozostałe bity posiadają wagi takie jak w NBC c n 2 n 1 1 2... 2 1 0 (U1) 1 2 1) i n cn c c c cn ci 2 i 0 ( (10)
26 Kod uzupełnień do 1 (U1) 1. Wszystkie bity zapisu liczby posiadają swoje wagi. 2. Najstarszy bit jest bitem znaku i ma wagę równą (-2 n-1 +1) 3. Pozostałe bity posiadają wagi takie jak w NBC c n 2 n 1 1 2... 2 1 0 (U1) 1 2 1) i n cn c c c cn ci 2 i 0 ( (10)
Kod uzupełnień do 1 (U1) 27 Zakres n bitowej liczby w kodzie U1 [-2 n-1 + 1, 2 n-1 1] Zakres ten jest identyczny z zakresem liczb w kodzie ZM. Liczba przeciwna powstaje w kodzie U1 przez negację wszystkich bitów
Przeliczanie liczb dziesiętnych na U1 28 dodatnie znajdujemy reprezentację liczby w NBC i uzupełniamy bitami o wartości 0 do uzyskania zadanej liczby bitów wymaganej przez przyjęty format zapisu U1.
Przeliczanie liczb dziesiętnych na U1 29 ujemne obliczamy moduł liczby; moduł przedstawiamy w naturalnym systemie dwójkowym uzupełniając go bitami o wartości 0 do długości przyjętego formatu U1; wszystkie bity zamieniamy na przeciwne. -113 (10) 113 (10) = 1110001 (2) 01110001 (2) 10001110 (U1)
Przeliczanie liczb dziesiętnych na U1 30 ujemne wyznaczamy wartość (2 n 1) + liczba, gdzie n oznacza liczbę bitów w przyjętym formacie U1. wartość kodujemy w NCB i otrzymujemy kod U1 liczby wyjściowej.. -113 (10) (8 bitów) 2 8-1 + (-113) = 256 1 113 = 142 142 (10) = 10001110 (2) -113 (10) = 10001110 (U1)
Dodawanie liczb w kodzie U1 31 Dodawanie wykonuje się zgodnie z zasadami dodawania dwójkowego. Jeśli występuje przeniesienie poza bit znaku, to do wyniku należy dodać 1. 1 1 1 1 0 0 1 1 +3 + 0 0 1 0 +2 0 1 0 1 +5 0 0 1 0 +2 + 1 1 1 0-1 0 0 0 0 + 0 0 0 1 0 0 0 1 1
Kod uzupełnień U1 32 Zakres liczb reprezentowanych w n-bitowym kodzie U1 taki sam jak Z-M [-2 n-1 + 1, 2 n-1 1] Operacje arytmetyczne nadal wymagają dodatkowych operacji Niejednoznaczna wartość 0 ma dwa słowa kodowe
Kod uzupełnień U1 33 Stałoprzecinkowe dodatnie - stosujemy poznane zasady wyznaczania wartości liczby 0111,1101 (U1) = 2 2 + 2 1 + 2 0 + 2-1 + 2-2 + 2-4 0111,1101 (U1) = 4 + 2 + 1 + 1 / 2 + 1 / 4 + 1 / 16 0111,1101 (U1) = 7 13 / 16
Kod uzupełnień U1 34 Stałoprzecinkowe ujemne - wyraz zbudowany z samych jedynek jest zawsze równy 0 111...111,111...111 = 0 n m waga bitu znakowgo U1 = -(max części całkowitej + max części ułamkowej )
Kod uzupełnień U1 35 Stałoprzecinkowe ujemne - wyraz zbudowany z samych jedynek jest zawsze równy 0 111...111,111...111 = 0 n m waga bitu znakowgo U1 = -(max części całkowitej + max części ułamkowej ) max części całkowitej = 2 n-1-1 max części ułamkowej = 2m 1 2 m
Kod uzupełnień U1 36 111...111,111...111 = 0 n m max części całkowitej = 2 n-1 1 max części ułamkowej = 2m 1 2 m waga bitu znakowgo U1 = -(2 n-1 1 + 2m 1 2 m )
Kod uzupełnień U1 37 111...111,111...111 = 0 n m waga bitu znakowgo U1 = -(2 n-1 1 + 2m 1 2 m ) 1011,1011 (U1) n = 4; m = 4, waga znakowa -(2 3-1 + 24 1 ) = -7 15 2 4 16 1011,1011 (U1) = -7 15 + 3 + 11 16 16 1011,1011 (U1) = -4 4 16
38 Kod uzupełnień U2 1. Wszystkie bity zapisu liczby posiadają swoje wagi. 2. Najstarszy bit jest bitem znaku i ma wagę ujemną równą (-2 n-1 ) 3. Pozostałe bity posiadają wagi takie jak w NBC c n 2 n 1 i n 1cn 2... c2c1c0 cn 1( 2 ) ci 2 i 0
Kod uzupełnień U2 39 c n 2 n 1 i n 1cn 2... c2c1c0 cn 1( 2 ) ci 2 i 0 01101011 (U2) = 64 + 32 + 8 + 2 + 1 = 107 (10 ) 11101011 (U2) = -2 7 + 64 + 32 + 8 + 2 + 1 = -128 + 107 = (-21) (10)
Kod uzupełnień U2 40 Zakres n bitowej liczby w kodzie U1 [-2 n-1... 2 n-1 1] Zakres ten jest niesymetryczny. Dla reprezentacji 8-bitowej 01111111 (U2) =2 7 1=127 10000000 (U2) = 2 7 = 128
Kod uzupełnień U2 41 Liczba przeciwna zanegowanie wszystkich bitów zapisu liczby U2 dodanie 1 01101110 (U2) 64 + 32 + 8 + 4 + 2 = 110 (10) 10010001 + 00000001 10010010 NOT 01101110 10010001 (-128) + 16 + 2 = (-128) + 18 = (-110) (10)
Kod uzupełnień U2 42 Liczba przeciwna przejść do pierwszego od prawej strony bitu zapisu liczby; do wyniku przepisać kolejne bity 0, aż do napotkania bitu o wartości 1, który również przepisać; wszystkie pozostałe bity przepisać zmieniając ich wartość na przeciwną.
Kod uzupełnień U2 43 01101110 (U2) Liczba U2 01101110 Liczba przeciwna U2 0 Liczba U2 01101110 Liczba przeciwna U2 10 Liczba U2 01101110 Liczba przeciwna U2 10010010
44 Przeliczanie liczb dziesiętnych na kod U2 dodatnia - znajdujemy jej przedstawienie binarne i uzupełniamy zerami do przyjętego formatu. 3 (10) = 0011 (U2 ) ujemna - bit znaku ma wartość 1. Ponieważ stoi on na pozycji o wadze -2 n-1, a reszta liczby jest dodawana do tej wagi, to musimy znaleźć taką wartość, która dodana do wagi bitu znaku da nam liczbę kodowaną. Wartość tą kodujemy na pozostałych bitach.
45 Przeliczanie liczb dziesiętnych ujemnych na U2-3 (10) w 4-bitowym kodzie U2. Bit znaku ma wartość -2 3, czyli -8. Aby otrzymać -3, do -8 musimy dodać liczbę 5 i tą wartość kodujemy na pozostałych bitach: -8 + 5 = -3-3 (10) = 1101 (U2) liczba -45 (10) w 8-bitowym kodzie U2. Bit znaku ma wartość -2 7, czyli -128-128 + 45 = 83 = 1010011 (2) -45 (10) = 11010011 (U2)
46 Przeliczanie liczb dziesiętnych ujemnych na U2 wyznaczamy zapis dwójkowy liczby przeciwnej (czyli dodatniej); otrzymany kod dwójkowy uzupełniamy do rozmiaru formatu U2. wyznaczamy liczbę przeciwną -45 (10) 45 (10) =101101 (2) =00101101 (U2) 11010011 (U2)
47 Przeliczanie liczb dziesiętnych ujemnych na U2 do liczby 2 n (n - ilość bitów w formacie U2) dodajemy przetwarzaną liczbę dziesiętną, w wyniku otrzymujemy wartość kodu dwójkowego równoważnego bitowo kodowi U2 przetwarzanej liczby; wynik dodawania zapisujemy w postaci naturalnego kodu dwójkowego 2 8 + (-45) = 256-45 = 211 = 11010011 (U2)
Kod uzupełnień U2(liczby czterobitowe) 48 3 +2 5 Dodawanie: 0011 +0010 0101-6 +(-3) 7 1010 +1101 10111 Niedomiar (-3) +(-2) -5 7 +(-5) 2 1101 + 1110 1 1011 0111 + 1011 1 0010 7 +1-8 0111 +0001 1000 Nadmiar
49 Kod uzupełnień U2 Uzupełnieniem dwójkowym liczby x zapisanej za pomocą n bitów nazywamy liczbę x U2 =2 n -x x = 0101 x U2 =2 4 -x = 10000 00101 =01011 y = 1011 y U2 =2 4 -y = 10000 01011 =00101 y U2 = x czyli ( x U2 ) U2=x
Kod uzupełnień U2 50 Zakres liczb reprezentowanych w n-bitowym kodzie U2 niesymetryczny [-2 n-1, 2 n-1 1] Operacje arytmetyczne nie wymagają dodatkowych operacji Jednoznaczna wartość 0
Kod uzupełnień U1 51 Stałoprzecinkowe dodatnie - stosujemy poznane zasady wyznaczania wartości liczby 0110,1011 (U2) = 2 2 + 2 1 + 2-1 + 2-3 + 2-4 0110,1011 (U2) = 4 + 2 + 1 + 1 / 2 + 1 / 8 + 1 / 16 0110,1011 (U2) = 6 11 / 16
Kod uzupełnień U1 52 Stałoprzecinkowe ujemne - stosujemy poznane zasady wyznaczania wartości liczby 1101,0011 (U2) = (-2 3 ) + 2 2 + 2 0 + 2-3 + 2-4 1101,0011 (U2) = (-8) + 4 + 1 + 1 / 8 + 1 / 16 1101,0011 (U2) = -(2 13 / 16 )
Notacja nadmiarowa 53 Kolejność 3 bitowych słów kodowych 000 001 010 011 100 101 110 111 NBC 0 1 2 3 4 5 6 7 U1 0 1 2 3-3 -2-1 0 ZM 0 1 2 3 0-1 -2-3 U2 0 1 2 3-4 -3-2 -1
Notacja nadmiarowa 54 Wartość binarna słowa kodowego jest równa kodowanej liczbie pomniejszonej o pewną stałą zwaną nadmiarem (ang. excess lub bias) KOD Wartości słów kodowych w systemach z nadmiarem Wartości nadmiaru - bias 4 3 2 1 0 (-1) (-2) (-3) (-4) 000-4 -3-2 -1 0 1 2 3 4 001-3 -2-1 0 1 2 3 4 5 010-2 -1 0 1 2 3 4 5 6 011-1 0 1 2 3 4 5 6 7 100 0 1 2 3 4 5 6 7 8 101 1 2 3 4 5 6 7 8 9 110 2 3 4 5 6 7 8 9 10 111 3 4 5 6 7 8 9 10 11
Notacja nadmiarowa 55 Wartość dziesiętna liczby zapisanej w dwójkowym kodzie z nadmiarem b n-1 b n-2...b 2 b 1 b 0 (BIAS) = b n-1 2 n-1 + b n-2 2 n-2 +... + b 2 2 2 + b 1 2 1 + b 0 2 0 - bias gdzie b - bit, cyfra dwójkowa 0 lub 1 n - liczba bitów w zapisie liczby bias - nadmiar, odchyłka w stosunku do naturalnych wartości słów kodowych 00011111 (BIAS=63) = 2 4 + 2 3 + 2 2 + 2 1 + 2 0-63 00011111 (BIAS=63) = 31-63 00011111 (BIAS=63) = (-32) (10)
Notacja nadmiarowa 56 15 1111 7 14 1110 6 13 1101 5 12 1100 4 11 1011 3 10 1010 2 9 1001 1 8 1000 0 7 0111-1 6 0110-2 5 0101-3 4 0100-4 3 0011-5 2 0010-6 1 0001-7 0 0000-8 Excess 8 Notation: Aby zakodować liczbę dziesiętną należy: 1. dodać do niej wartość 8, 2. zapisać wynik w postaci binarnej, 3. uzupełnić o brakujące początkowe zera.
57 Liczby duże i małe Zapisywanie liczb oznaczających bardzo duże lub bardzo małe wartości notacja naukowa. Gwiazda Proxima Centauri znajduje się w odległości 9460800000000 [km], 9,4608 x 10 12. Masa elektronu wynosi me = 0,00000000000000000000000000091095 [g], czyli 9,1095 x 10-28 [g]
58 Zapis zmiennopozycyjny Liczba w tym zapisie składa się z trzech części: liczby stałoprzecinkowej podstawy systemu potęgi zwanej wykładnikiem lub cechą. L = m * p c m mantysa p podstawa systemu c cecha - wykładnik potęgowy
59 Zapis zmiennopozycyjny L = m * p c 325 10 20 = 32,5 10 21 = 3,25 10 22 = 0,325 10 23 = dokładność liczby wielkość liczby Znormalizowana liczba zmiennoprzecinkowa to taka, w której mantysa spełnia nierówność: p > m 1
60 Zapis zmiennopozycyjny L = m * p c Przykład 8-bitowy zapis liczby 01101101 bit znaku; cecha kodowana z nadmiarem 4 na 3 bitach; mantysa na 4 bitach; 0 1 1 0 1 1 0 1 liczba dodatnia cecha 110 (BIAS=4) =6-4=2 mantysa.1101 11.01 czyli 3 1 4
61 Zapis zmiennopozycyjny L = m * p c Przykład 8-bitowy zapis liczby 10111100 1 0 1 1 1 1 0 0 liczba ujemna cecha 011 (BIAS=4) =3-4=-1 mantysa.1100 0.1100 czyli 3 8
62 Zapis zmiennopozycyjny L = m * p c Przykład +2 3 4 1 0. 1 1 0 1 0 1 1 cecha powinna mieć wartość 2, (2 + 4 = 6) czyli 110 (BIAS=4) 0 1 1 0 1 0 1 1
63 Zapis zmiennopozycyjny L = m * p c Przykład 2.625= 2 5 8 1 0. 1 0 1 utracony bit 0 1 0 1 0 cecha powinna mieć wartość 2, (2 + 4 = 6) czyli 110 (BIAS=4) 0 1 1 0 1 0 1 0 czyli 2 4 8 a nie 2 5 8
64 Standard zapisu zmiennoprzecinkowego IEEE 754 Standard IEEE 754 definiuje dwa rodzaje liczb zmiennoprzecinkowych: 32-bitowe (pojedynczej precyzji - ang. single precision) 64-bitowe (podwójnej precyzji - ang. double precision). Format zapisu zmiennoprzecinkowego IEEE 754 L = m * p c 32 bity (1 bit) b 31 (8 bitów) b 30... b 23 (BIAS=127) (23 bity)b 22... b 0 (U1) 64 bity (1 bit) b 63 (11 bitów) b 62... b 52 (BIAS=1023) (52 bity)b 51... b 0 (U1) Opis pół bitowych bit znaku bity kodu cechy bity mantysy
65 Standard zapisu Zapis cechy w notacji nadmiarowej umożliwia szybkie porównywanie liczb 00101010 > 00011001 zmiennoprzecinkowego IEEE 754 Format zapisu zmiennoprzecinkowego IEEE 754 32 bity (1 bit) b 31 (8 bitów) b 30... b 23 (BIAS=127) (23 bity)b 22... b 0 (U1) 64 bity (1 bit) b 63 (11 bitów) b 62... b 52 (BIAS=1023) (52 bity)b 51... b 0 (U1) Opis pół bitowych bit znaku bity kodu cechy bity mantysy Wzrost ilości bitów cech liczb zmiennoprzecinkowych wpływa na ich zakres. L = m * p c L = m * p c Wzrost liczby bitów mantys wpływa na ich precyzję, czyli dokładność odwzorowywania liczb rzeczywistych.
66 Standard zapisu zmiennoprzecinkowego IEEE 754 Format zapisu zmiennoprzecinkowego IEEE 754 Mantysy są zapisywane w stałoprzecinkowym kodzie U1. 32 bity (1 bit) b 31 (8 bitów) b 30... b 23 (BIAS=127) (23 bity)b 22... b 0 (U1) Mantysa jest prawie zawsze znormalizowana (p>m 1 ) - jej wartość liczbowa zawiera się pomiędzy 1 a 2. 64 bity (1 bit) b 63 (11 bitów) b 62... b 52 (BIAS=1023) (52 bity)b 51... b 0 (U1) Opis pół bitowych bit znaku bity kodu cechy bity ułamkowe bity mantysy mantysy Pierwszy bit całkowity mantysy zawsze wynosi 1 => zapamiętujemy tylko bity ułamkowe. Mantysa dłuższa o jeden bit - zwiększamy jej rozdzielczość do 24 bitów dla formatu pojedynczej precyzji i do 53 bitów dla formatu podwójnej precyzji.
67 Standard zapisu zmiennoprzecinkowego IEEE 754 Z kodu wydzielamy poszczególne pola Do odczytanej mantysy dodajemy na początku 01 i przecinek - otrzymujemy dodatnią liczbę stałoprzecinkową w kodzie U1. Obliczamy wartość cechy i mantysy, a następnie wyliczamy wartość liczby wg wzoru: L (IEEE 754) = m * p c = (-1) z *m*2 c 01000010110010000000000000000000 10010000000000000000000 (IEEE 754) ) z = 0 - liczba jest dodatnia c = 10000101 (BIAS=127) = 133-127 = 6 m = 01,10010000000000000000000 (U1) = 1 9 / 16
68 Standard zapisu zmiennoprzecinkowego IEEE 754 Z kodu wydzielamy poszczególne pola L (IEEE 754) = (-1) z * m * 2 c = (-1) 0 * 1 9 / 16 * 2 6 = 25 / 16 * 2 6 = Do 25 odczytanej * 2 2 = 25 * 4 mantysy = 100 (10) dodajemy na początku 01 i przecinek - 01000010110010000000000000000000 otrzymujemy dodatnią liczbę stałoprzecinkową (IEEE w 754) kodzie = 100 U1. (10) Obliczamy wartość cechy i mantysy, a następnie wyliczamy wartość liczby wg wzoru: L (IEEE 754) = m * p c = (-1) z *m*2 c 01000010110010000000000000000000 10010000000000000000000 (IEEE 754) ) z = 0 - liczba jest dodatnia c = 10000101 (BIAS=127) = 133-127 = 6 m = 01,10010000000000000000000 (U1) = 1 9 / 16
Zakres w standardzie IEEE 754 69 Największa cecha i mantysa cecha 11111110 (BIAS=127) 11111111 (BIAS=127) wartość zdenormalizowana c = 254-127 c = 127 mantysa 11111111111111111111111 (U1) m = 01, 11111111111111111111111 (U1) m = 1+ (2 23-1) / 2 23 = (2 24-1) / 2 23 max (IEEE 754) = m 2 c max (IEEE 754) = (2 24-1) / 2 23 2 127 max (IEEE 754) = (2 24-1) 2 104 max (IEEE 754) = 3,4028234663852885981170418348452 10 38
Zakres w standardzie IEEE 754 70 W pojedynczej precyzji Z (IEEE 754) = - 3,4 10 38... 3,4 10 38 W podwójnej precyzji Z (IEEE 754) = - 1,8 10 308... 1,8 10 308
Precyzja liczb IEEE 754 71 Precyzję zapisu liczby zawsze wyznacza ilość dostępnych bitów mantysy. Jedną cyfrę dziesiętną koduje (statystycznie) log 2 (10) bitów mantysy W pojedynczej precyzji - 24 bity mantysy 24 / log 2 (10) = 24 / 3,32 = 7,2 cyfr W podwójnej precyzji - 53 bity mantysy 53 bity / log 2 (10) = 53 bity / 3,32 = 15,96 cyfr
Wartości specjalne IEEE 754 72 Zero ujemne lub dodatnie bit znaku może przyjmować dowolną wartość, wszystkie bity cechy i mantysy są równe zero przy porównaniach zero dodatnie i ujemne są traktowane jako równe sobie Nieskończoności ujemna lub dodatnia wszystkie bity wykładnika (cechy) 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
73 Wartość zdenormalizowana IEEE 754 pojawia się, gdy występuje niedomiar (ang. underflow), ale wynik operacji można jeszcze zapisać denormalizując mantysę wszystkie bity cechy mają wartość 0 mantysa nie posiada domyślnej części całkowitej - jest liczbą ułamkową (0,xxxxxx). Wartość zdenormalizowana Pojedyncza precyzja m = 00,(pole mantysy) (U1) L = (-1) z *m*2-126 pole znaku pole cechy pole mantysy 0/1 0...0 bity ułamkowe mantysy Podwójna precyzja m = 00,(pole mantysy) (U1) L = (-1) z *m*2-1022
74 Najmniejsza wartość zmiennoprzecinkowa IEEE 7540 00000000000000000000000000000001 (IEEE 754) m = 0,00000000000000000000001 (U1) m = 2-23 min (IEEE 754) = 2-23 * 2-126 = 2-149 min (IEEE 754) = 1,4012984643248170709237295832899 * 10-45 min (IEEE 754) = ±1, 4 * 10-45
Liczby zmiennoprzecinkowe 75 IEEE 754
Kodowanie znaków 76 Dane wprowadzane za pomocą klawiatury, czyli znaki alfabetu, cyfry i znaki takie jak!,?, itd. nazywane są znakami alfanumerycznymi. Proces zamiany znaku wpisanego z klawiatury na jego reprezentację cyfrową nazywamy kodowaniem. Kod ASCII (ang. American Standard Code for Information Interchange) 7-bitowy kod przyporządkowujący liczby z zakresu 0 127: literom alfabetu angielskiego, cyfrom, znakom przestankowym i innym symbolom oraz poleceniom sterującym. litera a jest kodowana jako liczba 97, a znak spacji jest kodowany jako 32.
77 Kodowanie znaków
Kodowanie znaków 78 liczby z zakresu 128 255: służą do zapisu znaków tworzenia tabel lub ramek oraz do zapisu znaków narodowych. Strony kodowe to wersje kodu ASCII różniące się interpretacją symboli od 128 do 255..
Kodowanie znaków 79 Tekst zapisany w standardzie ISO 8859-2 Tekst zapisany w standardzie Windows 1250
Kodowanie znaków 80 256 znaków alfanumerycznych nie dawało możliwości zakodowania znaków diakrytycznych wielu języków np.: japońskiego, arabskiego, hebrajskiego itp. kod UNICODE o dłlugości16 bitów dla każdego znaku, a to daje już możliwość zakodowania 216, czyli 65536 znaków UNICODE jest jednoznaczny i uniwersalny, jest standardem dla XML, UNICODE mówi jakim znakom odpowiadają kody, a nie jak te znaki mają wyglądać Za sposób wypisywania znaków odpowiada kodowanie UTF-8, UTF-16 i UTF-32.
81 Z Windows do Unix...i z powrotem Znaki końca linii to \r (return) oraz \n (new line), które mogą pojawiać się pojedynczo lub razem. W zależności od systemu operacyjnego ich użycie jest inne : CR wykorzystuje tylko \r, carriage return (powrót karetki) (^M) LF wykorzystuje tylko \n, line feed (w wolnym tłumaczeniu: nowa linia) CRLF połączenie obu powyższych, wykorzystuje \r\n (Windows) Plik Unix owy czytany pod Windows ami brak przejścia do nowej linii