Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Podstawy informatyki 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.

Podobne prezentacje


Prezentacja na temat: "Podstawy informatyki 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi."— Zapis prezentacji:

1 Podstawy informatyki 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego Matuszyka

2 Jednostki informacji Bit (ang. bit) (Shannon, 1948) –Najmniejsza ilość informacji potrzebna do określenia, który z dwóch równie prawdopodobnych stanów przyjął układ Bajt (ang. byte) (Shannon, 1948) –Najmniejsza adresowalna jednostka informacji pamięci komputerowej, składająca się z bitów –Zazwyczaj przyjmuje się, że 1B = 8b (oktet) –Najbardziej znaczący bit (bajt) = bit (bajt) o największej wadze (w zapisie z lewej strony) –Najmniej znaczący bit (bajt) = bit (bajt) o najmniejszej wadze (w zapisie z prawej strony)

3 Jednostki informacji 1kb = 1 024b 1Mb = 1 024kb = 1 048 576b 1Gb = 1 024Mb = 1 048 576kb = 1 073 741 824b

4 Sposoby zapisu danych w pamięci Jak zapisać wielobajtowe dane pod danym adresem? W jakiej kolejności przesyłać kolejne bajty? Big-endian Najbardziej znaczący bajt jest umieszczany jako pierwszy Little-endian Najmniej znaczący bajt jest umieszczany jako pierwszy

5 Reprezentacja liczb w komputerze Reprezentacja liczb całkowitych –Reprezentacja liczb nieujemnych –Kod znak-moduł –Kod U1 –Kod U2 –Kod z nadmiarem Liczby stałoprzecinkowe Liczby zmiennoprzecinkowe

6 Systemy addytywne Posiadają osobne symbole dla pierwszych kilku małych liczb oraz kolejne symbole dla ich wielokrotności. W systemach tych liczby tworzy się przez sumowanie wartości kolejnych symboli. –jedynkowy (ludy pierwotne, np. Pigmeje) –egipski (dziesiątkowy) –rzymski (Etruskowie, Rzym) Systemy pozycyjne W pozycyjnych systemach liczbowych ten sam symbol (cyfra) ma różną w zależności od pozycji, którą zajmuje w zapisie danej liczby. –dwójkowy –ósemkowy –dziesiętny –szesnastkowy Systemy reprezentacji liczb Źródło: www.wikipedia.org

7 Systemy addytywne Posiadają osobne symbole dla pierwszych kilku małych liczb oraz kolejne symbole dla ich wielokrotności. W systemach tych liczby tworzy się przez sumowanie wartości kolejnych symboli. –jedynkowy (ludy pierwotne, np. Pigmeje) –egipski (dziesiątkowy) –rzymski (Etruskowie, Rzym) Systemy pozycyjne W pozycyjnych systemach liczbowych ten sam symbol (cyfra) ma różną w zależności od pozycji, którą zajmuje w zapisie danej liczby. –dwójkowy –ósemkowy –dziesiętny –szesnastkowy Systemy reprezentacji liczb

8 System egipski (system addytywny) 4622 Źródło: www.wikipedia.org

9 System rzymski (system addytywny) II2 IV4 XIX19 XCVI96 CDLXXI461 MCMXCII1992

10 System Majów (system pozycyjny)

11 Liczbowe systemy pozycyjne Cechy dowolnego systemu pozycyjnego o podstawie p System pozycyjny charakteryzuje liczba zwaną podstawą systemu pozycyjnego Do zapisu liczby służą cyfry bądź litery (w przypadku podstawy > 10) Cyfr jest zawsze tyle, ile wynosi podstawa systemu: 0,1,2,...,(p-1) Cyfry ustawiamy na kolejnych pozycjach Pozycje numerujemy od 0 poczynając od strony prawej zapisu Każda pozycja posiada swoją wagę Waga jest równa podstawie systemu podniesionej do potęgi o wartości numeru pozycji Cyfry bądź litery określają ile razy waga danej pozycji uczestniczy w wartości liczby Wartość liczby obliczamy sumując iloczyny cyfr przez wagi ich pozycji

12 Liczbowe systemy pozycyjne System dwójkowy p=2, cyfry: 0,1 1010 (2) =1*2 3 +0*2 2 +1*2 1 +0*2 0 =10 (10) System ósemkowy p=8, cyfry: 0-7 1234 (8) =1*8 3 +2*8 2 +3*8 1 +4*8 0 =668 (10) System dziesiętny p=10, cyfry: 0-9 1234 (10) =1*10 3 +2*10 2 +3*10 1 +4*10 0 =1234 (10) System szesnastkowy p=16, cyfry: 0-9, A-F 12AF (16) =1*16 3 +2*16 2 +10*16 1 +15*16 0 =4783 (10)

13 Liczbowe systemy pozycyjne – schemat Hornera Wartość liczby reprezentowanej przez ciąg znaków (zapisanej w systemie pozycyjnym) C n-1 C n-2 …C 1 C 0 obliczamy ze wzoru Inne rozwiązanie - zastosowanie schematu Hornera Rozpatrzmy wielomian współczynniki a i wielomianu odpowiadają cyfrom C i, kolejne potęgi x to potęgi podstawy p Budowa schematu C n-1 C n-2...C 2 C 1 C 0 = C n-1 p n-1 + C n-2 p n-2 +... + C 2 p 2 + C 1 p 1 + C 0 p 0 W(x) = a n-1 x n-1 + a n-2 x n-2 +... + a 2 x 2 + a 1 x + a 0

14 Schemat Hornera Zalety –Oszczędność przy mnożeniu –Sposób przetwarzania cyfr Brane są kolejno jedna cyfra po drugiej z ciągu wejściowego aż do napotkania końca zapisu (taka kolejność cyfr jest zwykle zgodna z kolejnością ich przechowywania w łańcuchu tekstowym) Dla pięciocyfrowej liczby w systemie pozycyjnym Wzór 10 mnożeń, 4 dodawania Schemat Hornera 4 mnożenia, 4 dodawania long int sh(char *s, unsigned int p) { int result=0; int i; i=0; while(s[i]){ result = result*p + (s[i]-'0'); i++; } return result; }

15 Przeliczanie liczb pomiędzy systemami (2)->(16) 1010110001010110 AC56 (2)->(8) 101110111011 5673

16 Przeliczanie liczb pomiędzy systemami (10)->(2) 246 (10) =11110110 (2) (10)->(16) 246 (10) =F6 (16) (10)->(8) 246 (10) =366 (8) 246/2=123Reszta 0 123/2=61Reszta 1 61/2=30Reszta 1 30/2=15Reszta 0 15/2=7Reszta 1 7/2=3Reszta 1 3/2=1Reszta 1 1/2=0Reszta 1 246/16=15Reszta 6 15/16=0Reszta F 246/8=30Reszta 6 30/8=3Reszta 6 3/8=0Reszta 3

17 Przykłady dodawania System 10System 16System 8System 2 11 1111111 12C141100 +29+1D+35+11101 412951101001

18 Przykłady dodawania System 2System 10 10000 1000 10011 10102020 1015 1004 1106 0102 +011+3 1010020 10100 (2) =1*2 4 +1*2 2 =16+4=20 (10)

19 Nadmiar (integer overflow) Założenie: reprezentacja 4-bitowa bez znaku. Bit nadmiaru jest ustawiony na 1. Nadmiar występuje wtedy, gdy wynik działania nie mieści się w dopuszczalnym zakresie liczb, które mogą być zapisane w danej reprezentacji. 11111 10019 101111 101004

20 int main() { unsigned short int a; cout< { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/3/1217596/slides/slide_20.jpg", "name": "int main() { unsigned short int a; cout<

21 Kodowanie znak-moduł Liczba całkowita ze znakiem (kodowana na 8 bitach) Znak (najbardziej znaczący bit): 1 oznacza liczbę ujemną 0 oznacza liczbę dodatnią Moduł liczby (7 bitów) 00110111 +55

22 Kodowanie znak-moduł Liczba ujemna jest kodowana jako znak 1 i kod binarny modułu tej liczby Sposób wygodny dla człowieka Przy operacjach arytmetycznych trzeba porównywać znaki Reprezentacja liczby 0: 00000000 oraz 10000000 Zakres liczb: [-2 n-1 +1, 2 n-1 -1] 10110111 -55

23 Kod uzupełnień do 1 (U1) Liczba ujemna x jest kodowana na jeden z dwóch (równoważnych) sposobów (dla liczby -55): 1.Kod binarny modułu 00110111 negacja bitowa 11001000 2.Kod binarny liczby 2 8 -1-55=256-56=200 11001000 Sposób mało wygodny dla człowieka Łatwe operacje arytmetyczne Reprezentacja liczby 0: 00000000 oraz 11111111 Zakres liczb: [-2 n-1 +1, 2 n-1 -1]

24 Zasady dodawania (U1) Liczby zapisane w kodzie U1 dodajemy zgodnie z zasadami dodawania dwójkowego, ale jeżeli wystąpi przeniesienie poza bit znaku, to do wyniku dodajemy 1. 11111 0100110177 0010101143 01111000120 1111111 10110010-77 0010101143 11011101-34 111111111 0100110177 11010100-43 00100001 00000001 0010001034 111111111 10110010-77 11010100-43 10000110 00000001 10000111-120

25 Kod uzupełnień do 2 (U2) Liczba ujemna x jest kodowana na jeden z dwóch (równoważnych) sposobów (dla liczby -55): 1.Kod binarny modułu 00110111 negacja bitowa i dodajemy 1 11001000 + 1 = 11001001 2.Kod binarny liczby 2 8 -55=256-55=201 11001001 Sposób mało wygodny dla człowieka Łatwe operacje arytmetyczne Reprezentacja liczby 0: 00000000 Zakres liczb: [-2 n-1, 2 n-1 -1]

26 Zasady dodawania (U2) Liczby zapisane w kodzie U2 dodajemy zgodnie z zasadami dodawania dwójkowego. 1111111 10110011-77 0010101143 11011110-34 111111111 0100110177 11010101-43 0010001034 111111111 10110011-77 11010101-43 10001000-120

27 Kod z nadmiarem (bias) Wartość liczby to wartość binarna pomniejszona o pewną stałą zwaną nadmiarem (bias) W zależności od nadmiaru możemy otrzymywać różne zakresy kodowanych liczb. Zakres liczb: [-bias, 2 n -1-bias]

28 int main() { int a; cout<<"Podaj liczbe\n\n"; cin>>a; for (int i=31; i>=0; i--) cout >i)&1); cout< { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/3/1217596/slides/slide_28.jpg", "name": "int main() { int a; cout<< Podaj liczbe\n\n ; cin>>a; for (int i=31; i>=0; i--) cout >i)&1); cout<>a; for (int i=31; i>=0; i--) cout >i)&1); cout<

29 Zapis liczby stałoprzecinkowej w systemie pozycyjnym: Część całkowita – n cyfr Część ułamkowa – m cyfr Liczby stałoprzecinkowe

30 55.8125 (10) =? (2) Część całkowitą sukcesywnie dzielimy przez 2 i bierzemy reszty 55.8125 (10) =110111.1101 (2) Część ułamkową sukcesywnie mnożymy przez 2 i bierzemy część całkowitą 55/2=271 27/2=131 13/2=61 6/2=30 3/2=11 1/2=01 0 0.8125*2=1.6251 0.625*2=1.251 0.25*2=0.50 0.5*2=11 0

31 0.1 (10)= ? (2) Nie każdy ułamek skończony w systemie 10 jest skończony w systemie 2! 0.1 (10) =0.0(0011) (2) 0.1*2=0.20 0.2*2=0.40 0.4*2=0.80 0.8*2=1.61 0.6*2=1.21 0.2*2=0.40 0.4*2=0.80 0.8*2=1.61 0.6*2=1.21 0.2*2=0.40 ……

32 #include using namespace std; int main() { float x=0.1; if(10*x==1) cout << "Tak\n"; else cout << "Nie\n"; return 0; } #include using namespace std; int main() { double x=0.1; if(10*x==1) cout << "Tak\n"; else cout << "Nie\n"; return 0; }

33 Zakres binarnych liczb stałoprzecinkowych. Błędy zaokrągleń Zakres n – liczba bitów części całkowitej m – liczba bitów części ułamkowej Największa liczba: Błędy zaokrągleń Niech L d – wartość dokładna liczby (w systemie dziesiętnym) L b – wartość w zapisie binarnym Błąd bezwzględny Błąd względny

34 Błędy zaokrągleń Reprezentacja liczby 0.1 za pomocą pięciu bitów ułamkowych:

35 Liczby zmiennoprzecinkowe s – znak liczby m – mantysa p – podstawa systemu c – cecha

36 Liczby zmiennoprzecinkowe Położenie przecinka w liczbach zmiennoprzecinkowych nie jest ustalone. Znormalizowana liczba zmiennoprzecinkowa to taka liczba, której mantysa spełnia zależność: W systemie dwójkowym mantysa jest zawsze równa 1!

37 Precyzja liczb zmiennoprzecinkowych Założenia: –mantysa 3 bity, bez znaku, liczba stałoprzecinkowa, przecinek po pierwszym bicie –cecha 3 bity bez znaku x.xx·2 xxx 0.000.010.100.111.001.011.101.11 00000.250.50.7511.251.51.75 00100.511.522.533.5 01001234567 01102468101214 1000481216202428 10108162432404856 1100163248648096112 1110326496128160192224

38 Precyzja liczb zmiennoprzecinkowych Próba zakodowania liczby 9 Mamy do dyspozycji format: x.xx·2 xxx A zatem mantysa 1.001 zostanie obcięta do 1.00 i w ten sposób dostaniemy liczbę

39 Standard IEEE 754 W celu ujednolicenia reprezentacji binarnej oraz operacji numerycznych na różnych platformach sprzętowych, wprowadzono standard zapisu zmiennoprzecinkowego IEEE 754 (William Kahan). Standard ten definiuje: –formaty reprezentacji liczb zmiennoprzecinkowych: –single-precision (32 bity) –double-precision (64bity) –single-extended precision (> 43 bitów) –double-extended precision (> 79 bitów, zazwyczaj 80 bitów) –wartości specjalne (np. nieskończoność, NaN) –zmiennoprzecinkowe operacje –modele zaokrąglania –wyjątki

40 Ogólny format w standardzie IEEE 754 Sign (bit znaku): 0 – liczba dodatnia, 1 – liczba ujemna Exponent (cecha): kod z nadmiarem (bias=2 e-1 -1) Fraction (mantysa): liczba stałoprzecinkowa pozbawiona najbardziej znaczącego bitu reprezentującego część całkowitą (prawdziwa mantysa to 1.Fraction) Wartości specjalne SEF Typcechamantysa zero00 Liczby nieznormalizowane00 Liczby znormalizowane1 – 2 e-1 Dowolna Nieskończoności2 e-1 0 NaN2 e-1 0

41 Liczba pojedynczej precyzji - float Znak – 1 bit Cecha – 8 bitów, bias=127 Mantysa – 23 bity W sumie 32 bity 00111110001000000000000000000000 1 jest zawsze

42 Liczba podwójnej precyzji - double Znak – 1 bit Cecha – 11 bitów, bias=1023 Mantysa – 52 bity W sumie 64 bity 01000000000100100000000000000000 00000000000000000000000000000000 1 jest zawsze

43 Analiza bitów liczby o pojedynczej precyzji #include using namespace std; struct bity { int M:23,E:8,S:1; }; ostream &operator<<(ostream &strum, bity &B) { if(B.S) strum<<'-'; else strum<<'+'; double m=1,e=0; for (int i=22; i>=0; i--) m+=(B.M>>i&1)*pow(2.0,i-23); for (int i=7; i>=0; i--) e+=(B.E>>i&1)*pow(2.0,i); strum<=0; i--) S+=(B.E>>i&1)+'0'; S+=' '; for (int i=22; i>=0; i--) S+=(B.M>>i&1)+'0'; return S;} int main(){ union{ float f; bity b; }; cout<<"Podaj liczbe rzeczywista\n"; cin>>f; cout< { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/3/1217596/slides/slide_43.jpg", "name": "Analiza bitów liczby o pojedynczej precyzji #include using namespace std; struct bity { int M:23,E:8,S:1; }; ostream &operator<<(ostream &strum, bity &B) { if(B.S) strum<< - ; else strum<< + ; double m=1,e=0; for (int i=22; i>=0; i--) m+=(B.M>>i&1)*pow(2.0,i-23); for (int i=7; i>=0; i--) e+=(B.E>>i&1)*pow(2.0,i); strum<=0; i--) S+=(B.E>>i&1)+ 0 ; S+= ; for (int i=22; i>=0; i--) S+=(B.M>>i&1)+ 0 ; return S;} int main(){ union{ float f; bity b; }; cout<< Podaj liczbe rzeczywista\n ; cin>>f; cout<=0; i--) m+=(B.M>>i&1)*pow(2.0,i-23); for (int i=7; i>=0; i--) e+=(B.E>>i&1)*pow(2.0,i); strum<=0; i--) S+=(B.E>>i&1)+ 0 ; S+= ; for (int i=22; i>=0; i--) S+=(B.M>>i&1)+ 0 ; return S;} int main(){ union{ float f; bity b; }; cout<< Podaj liczbe rzeczywista\n ; cin>>f; cout<

44 Prezentacja udostępniona na licencji Creative Commons: Uznanie autorstwa, Na tych samych warunkach 3.0. Pewne prawa zastrzeżone na rzecz autorów. Zezwala się na dowolne wykorzystywanie treści pod warunkiem wskazania autorów jako właścicieli praw do prezentacji oraz zachowania niniejszej informacji licencyjnej tak długo, jak tylko na utwory zależne będzie udzielana taka sama licencja. Tekst licencji dostępny jest na stronie: http://creativecommons.org/licenses/by-sa/3.0/deed.pl


Pobierz ppt "Podstawy informatyki 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi."

Podobne prezentacje


Reklamy Google