Wprowadzenie do informatyki - ć wiczenia Stałoprzecinkowy zapis liczb wymiernych dr inż . Izabela Szczęch WSNHiD Ćwiczenia z wprowadzenia do informatyki Reprezentacja liczb wymiernych § Stałoprzecinkowa § bez znaku § ze znakiem § Zmiennoprzecinkowa § pojedynczej precyzji § podwó jnej precyzji § rozszerzonej precyzji Izabela Szczęch 1 Wprowadzenie do informatyki - ć wiczenia Plan zaję ć n Zapis stałoprzecinkowy bez znaku - definicja i konwersje n Zapis stałoprzecinkowy ze znakiem - definicja i konwersje n Zakresy liczb w reprezentacji stałoprzecinkowej n Dokładnoś ć reprezentacji stałoprzecinkowej n Arytmetyka w reprezentacji stałoprzecinkowej 3 Zapis stałoprzecinkowy § Podejś cie stałoprzecinkowe – zakłada okreś lenie ile bitó w tworzy częś ć całkowitą liczby, a ile częś ć ułamkową. Przecinek jest zatem umieszczany w stałym dla danego formatu miejscu. § Dla liczb całkowitych w zapisie binarnym otrzymujemy zawsze dokładne wartoś ci § Kodowanie liczb niecałkowitych w ogó lnoś ci obarczone jest błędem § Rozró ż niamy dwa zapisy stałoprzecinkowe: § bez znaku § ze znakiem 4 Izabela Szczęch 2 Wprowadzenie do informatyki - ć wiczenia Zapis stałoprzecinkowy bez znaku - definicja i konwersja Dziesię tny zapis stałoprzecinkowy bez znaku § Zapis pozycyjny moż na w prosty sposó b rozszerzyć na liczby ułamkowe wprowadzając pozycje o wagach ułamkowych. Wagi pozycji 103 102 101 Cyfry zapisu 3 5 7 100 Częś ć całkowita 10-1 9 , 8 10-2 10-3 10-4 10-5 2 9 1 4 Częś ć ułamkowa 6 Izabela Szczęch 3 Wprowadzenie do informatyki - ć wiczenia Binarny zapis stałoprzecinkowy bez znaku Wagi pozycji 23 22 21 20 2-1 2-2 2-3 2-4 2-5 Cyfry zapisu 1 0 1 0 , 1 1 0 0 1 Częś ć całkowita Częś ć ułamkowa 1010,11001 (2) = 23 + 21 + 2-1 + 2-2 + 2-5 = 8 + 2 + 1/2 + 1/4 + 1/32 = 10 25/32 7 Zapis stałoprzecinkowy bez znaku (bz (bz)) § Liczba wymierna L zapisana w systemie pozycyjnym o podstawie P w postaci ciągu cyfr cn-1… c1c0 c-1… c-m (P) ma wartoś ć liczbową w = cn-1Pn-1 + cn-2Pn-2 + … + c1P1 + c0 + c-1P-1 + … + c-mP-m gdzie c - cyfra dwó jkowa 0 lub 1, n - liczba bitó w częś ci całkowitej liczby m - liczba bitó w częś ci ułamkowej liczby § Przykład 1010,11001(2) = 23 + 21 + 2-1 + 2-2 + 2-5 = 8 + 2 + 1/2 + 1/4 + 1/16 = 10 13/16 8 Izabela Szczęch 4 Wprowadzenie do informatyki - ć wiczenia Konwersja zapisu stałoprzecinkowego bez znaku na system dziesię tny SPOSÓ B 1: Obliczamy z definicji wartoś ć liczby w zapisie stałoprzecinkowym sumując iloczyny wag pozycji razy podstawa systemu. Należ y pamiętać , ż e wagi częś ci ułamkowej są ujemne. Obliczyć wartoś ć dziesiętną liczby stałoprzecinkowej (bez znaku) 110100,111011(2). 110100,111011 (2) = 25+24+22+2-1+2-2+2-3+2-5+26 =32+16+4+ 1/2+1/4+1/8 +1/32+1/64 =52 + 32/64 + 16/64 + 8/64 + 2/64 + 1/64 = 52 59/64 (10) 9 Konwersja zapisu stałoprzecinkowego bez znaku na system dziesię tny SPOSÓ B 2: Wartoś ć częś ci całkowitej obliczamy jak poprzednio. Częś ć ułamkową traktujemy chwilowo jak liczbę całkowitą, obliczamy jej wartoś ć i wynik mnoż ymy przez wagę ostatniej pozycji liczby wejś ciowej: Obliczyć wartoś ć dziesiętną liczby stałoprzecinkowej bez znaku 110100,111011(2). Częś ć całkowita ma wartoś ć 52(10). Wyznaczamy wartoś ć częś ci ułamkowej: 111011(2) = 25+24+23+21+20 = 32 + 16 + 8 + 2 + 1 = 59 Waga ostatniej pozycji wynosi 2-6 = 1/64, zatem 0,111011(2) = 59*1/64 = 59/64 Łączymy częś ć całkowitą z częś cią ułamkową i otrzymujemy: 110100,111011(2) = 52 59/64 (10) Izabela Szczęch 10 5 Wprowadzenie do informatyki - ć wiczenia Konwersja zapisu stałoprzecinkowego bez znaku na system dziesię tny SPOSÓ B 3: Traktujemy częś ć całkowitą i częś ć ułamkową jak jedną liczbę całkowitą. Za pomocą schematu Hornera wyznaczamy wartoś ć tej liczby, a wynik mnoż ymy przez wagę ostatniej pozycji liczby wejś ciowej. 11 Algorytm Horner’ a obliczania wartości dziesię tnej liczby stałoprzecinkowej n m P w - liczba cyfr w częś ci całkowitej - liczba cyfr w częś ci ułamkowej - podstawa systemu pozycyjnego, w któ rym jest zapisana liczba - cyfra stojąca na i-tej pozycji. Pozycja o numerze 0 jest pierwszą pozycją od strony prawej. - obliczana wartoś ć liczby 1. 2. 3. 4. 5. 6. w← 0 i← n-1 w ← ci + w x P jeś li i = -m, to w ← w x P-m i kończymy i← i-1 wró ć do punktu 3 ci Izabela Szczęch 12 6 Wprowadzenie do informatyki - ć wiczenia Algorytm Horner’ a obliczania wartości dziesię tnej liczby stałoprzecinkowej Obliczyć przy pomocy algorytmu Hornera wartoś ć dziesiętną binarnej (czyli P=2) liczby stałoprzecinkowej bez znaku 110100,111011(2). w← 0 w ← 1 + 0*2 =1 w ← 1 + 1*2 = 3 w ← 0 + 3*2 = 6 w ← 1 + 6*2 = 13 w ← 0 + 13*2 = 26 w ← 0 + 26*2 = 52 częś ć całkowita obliczona, kontynuujemy z częś cią ułamkową -------------------------------------------------w ← 1 + 52*2 = 105 w ← 1 + 105*2 = 211 w ← 1 + 211*2= 423 w ← 0 + 423*2 = 846 w ← 1 + 846*2 = 1693 w ← 1 + 1693 *2 = 3387 koniec częś ci ułamkowej w ← 3387 * 2-6 = 3387* 1/64 = 52,921875 = 52 59/64 (10)) 13 Konwersja zapisu stałoprzecinkowego bez znaku na system dziesię tny Zadania: Dowolnym sposobem oblicz wartoś ć dziesiętną następujących liczb stałoprzecinkowych bez znaku: a) b) c) d) 110,0011(2) 213,132(4) 21,11(3) 75,402(8) 14 Izabela Szczęch 7 Wprowadzenie do informatyki - ć wiczenia Konwersja z systemu dziesię tnego Załó ż my, ż e chcemy znaleź ć zapis liczby dziesiętnej w systemie o podstawie r z dokładnoś cią do m pozycji ułamkowych. SPOSÓ B 1: § Liczbę rozdzielamy na częś ć całkowitą oraz częś ć ułamkową. § Częś ć całkowitą przeliczamy na system o podstawie r. § Częś ć ułamkową przeliczamy wg następujących krokó w: Dopó ki nie otrzymamy w wyniku zera lub nie wyznaczymy zadanej iloś ci cyfr ułamkowych § częś ć ułamkową mnoż ymy przez r, § częś ć całkowita wyniku mnoż enia jest kolejną cyfrą zapisu stałoprzecinkowego w systemie o podstawie r § do następnego mnoż enia bierzemy jedynie częś ć ułamkową wyniku. 15 Konwersja z systemu dziesię tnego Przykład: Przeliczyć na system dwó jkowy bez znaku liczbę dziesiętną 2,21(10) z dokładnoś cią do 4 miejsc po przecinku. Wyznaczamy częś ć całkowitą liczby 2(10) = 10(2). Wyznaczamy cyfry częś ci ułamkowej 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 - koniec, mamy 4 cyfry ułamkowe Uwaga: pierwsza wyznaczona cyfra częś ci ułamkowej to bit najbliż szy przecinkowi. Po osiągnięciu 4 cyfr, częś ć ułamkowa wciąż jest ≠ 0, tzn. otrzymane rozw. jest przybliż one (z dokładnoś cią do 4 cyfr ułamkowych, czyli błąd < 2-4). 2,21(10) =10,0011(2) 10,0011(2) =21+2-3+2-4 = 2+1/8+1/16 = 23/16 = 2,1875(10) ≠ 2,21(10) Izabela Szczęch 16 8 Wprowadzenie do informatyki - ć wiczenia Konwersja z systemu dziesię tnego Załó ż my, ż e chcemy znaleź ć zapis liczby dziesiętnej w systemie o podstawie r z dokładnoś cią do m pozycji ułamkowych. SPOSÓ B 2: § W tym celu liczbę dziesiętną mnoż ymy przez rm, bierzemy częś ć całkowitą wyniku i przeliczamy ją na zapis w systemie o podstawie r. § Następnie za pomocą przecinka oddzielamy od końca zapisu m pozycji i otrzymujemy zapis liczby dziesiętnej w wyjś ciowym systemie o podstawie r z zadaną dokładnoś cią. Uwaga: oddzielenie za pomocą przecinka m ostatnich bitó w odpowiada podzieleniu liczby przez rm, czyli to co najpierw pomnoż yliś my teraz dzielimy i dlatego wynik jest poprawny 17 Konwersja z systemu dziesię tnego Przykład 1: Przeliczyć na system dwó jkowy bez znaku liczbę 2,21(10) z dokładnoś cią do 4 bitó w ułamkowych. Liczbę mnoż ymy przez 24 = 16, zaokrąglamy w dó ł do wartoś ci całkowitej i przeliczamy na system dwó jkowy: ë2,21 x 16 û = ë35,36û = 35 35 div 2 = 17 i reszta 1 17 div 2 = 8 i reszta 1 8 div 2 = 4 i reszta 0 4 div 2 = 2 i reszta 0 2 div 2 = 1 i reszta 0 1 div 2 = 0 i reszta 1, koniec 35(10) = 100011(2) Rozdzielamy przecinkiem 4 cyfry końcowe i otrzymujemy ostatecznie: 2,21(10) = 10,0011(2) (jest to oczywiś cie wartoś ć przybliż ona, błąd <2-4) 18 Izabela Szczęch 9 Wprowadzenie do informatyki - ć wiczenia Konwersja z systemu dziesię tnego Przykład 2: Przeliczyć na system tró jkowy bez znaku liczbę 12 8/9 (10) z dokładnoś cią do 2 bitó w ułamkowych. Liczbę 12 8/9 (10) mnoż ymy przez 32 = 9, zaokrąglamy w dó ł do wartoś ci całkowitej i przeliczamy na system dwó jkowy: 12 8/9 x 9 = 116 w← w← w← w← w← 116 div 3 = 38 i reszta 2 38 div 3 = 12 i reszta 2 12 div 3 = 4 i reszta 0 4 div 3 = 1 i reszta 1 1 div 3 = 0 i reszta 1 (koniec) Otrzymaliś my kolejne cyfry 11022. Dwie ostatnie cyfry umieszczamy po przecinku. Ostatecznie: 12 8/9 (10) = 110,22(3) Pytanie: Czy jest to wartoś ć dokładna? 19 Konwersja z systemu dziesię tnego Zadania: Dowolnym sposobem wyznaczyć stałoprzecinkową reprezentację bez znaku następujących liczb: a) 10,125(10) à (2) b) 8,13(10) à (4) c) 120,125(10) à (5) 20 Izabela Szczęch 10 Wprowadzenie do informatyki - ć wiczenia Zapis stałoprzecinkowy ze znakiem - definicja i konwersja Zapis stałoprzecinkowy ze znakiem § Do reprezentacji znaku w zapisie stałoprzecinkowym moż emy wykorzystać DOWOLNĄ reprezentację liczby ze znakiem, przykładowo kod znak-moduł czy kod U2. § Liczba stałoprzecinkowa L w przykładowym kodzie znakznak-moduł : L = 11101010,11101001 (ZM) bit znaku moduł liczby 1 1101010,11101001 Najstarszy bit to bit znaku. Jedynka na najstarszym bicie mó wi nam, ż e liczba jest ujemna. Pozostaje nam obliczenie jej wartoś ci, czyli wyznaczenie jej modułu. Moż na to zrobić na kilka ró wnoważ nych sposobó w omó wionych wcześ niej. Izabela Szczęch 22 11 Wprowadzenie do informatyki - ć wiczenia Konwersje - ZADANIA Zadanie 1: Oblicz wartoś ć dziesiętną podanych stałoprzecinkowych liczb dwó jkowych zapisanych w kodzie znak-moduł a) 101010,10 c) 111111,11 b) 011110,11 d) 000110,01 Zadanie 2: Wyznacz dwó jkową stałoprzecinkową reprezentację w kodzie znak-moduł poniż szych liczb dziesiętnych z dokładnoś cią do 8 bitó w po przecinku. Przyjmij, ż e wynik ma być zapisany na 16-tu bitach a) 1,125 c) -2,0625 b) 0,1 d) -1,13 23 Zakres liczb w dwó jkowej reprezentacji stałoprzecinkowej Izabela Szczęch 12 Wprowadzenie do informatyki - ć wiczenia Zakres liczb stałoprzecinkowych w kodzie ZM § Jaka jest najmniejsza i największa wartoś ci liczby, któ rą da się przedstawić w danej reprezentacji stałoprzecinkowej w kodzie znakznak-moduł? § Łatwo zauważ yć , ż e w obu przypadkach moduł musi mieć wartoś ć maksymalną (czyli zaró wno częś ć całkowita jak i ułamkowa muszą się składać z samych 1), a bit znaku musi być 0 dla wartoś ci największej i 1 dla wartoś ci najmniejszej. 25 Zakres liczb stałoprzecinkowych w kodzie ZM § Zadania Zadania:: 1. Wyznacz zakres dwó jkowych liczb stałoprzecinkowych w kodzie ZM reprezentowanych na 16 bitach (1 bit na znak, 7 bitó w na częś ć całkowitą, 8 bitó w na częś ć ułamkową). 2. Podaj ogó lny wzó r okreś lający zakres ii-bitowych dwó jkowych liczb stałoprzecinkowych w kodzie ZM, gdzie najstarszy bit to bit znaku, częś ć całkowita jest n-bitowa bitowa,, a częś ć ułamkowa mm-bitowa. 26 Izabela Szczęch 13 Wprowadzenie do informatyki - ć wiczenia Zakres liczb stałoprzecinkowych w kodzie ZM § Liczbę stałoprzecinkową moż emy potraktować jako złoż enie dwó ch liczb – całkowitej n-bitowej oraz ułamkowej m-bitowej. § Częś ć całkowita dla n bitó w przyjmuje największą wartoś ć ró wną 2n – 1 § Częś ć ułamkowa będzie największa, gdy wszystkie jej bity ustawione zostaną na 1. Dla m bitó w wartoś ć takiej liczby wyniesie (2m - 1) / 2m § Łączymy obie częś ci i otrzymujemy zakres liczby w kodzie ZM: n - (2 - 1 + 2m -1 2 m n ); 2 - 1 + 2m -1 2m 27 Dokładność reprezentacji stałoprzecinkowej Izabela Szczęch 14 Wprowadzenie do informatyki - ć wiczenia Dokładność reprezentacji stałoprzecinkowej § Liczby wymierne dokładnie zapisywalne w komputerze to tzw. liczby maszynowe. § Pozostałe liczby wymierne są wyraż ane z pewnym przybliż eniem poprzez wykorzystanie liczb maszynowych. § Wartoś ci liczb stałoprzecinkowych ró wnomiernie rozkładają się na osi (przykład dla reprezentacji z 4 bitami ułamkowymi): 29 Dokładność reprezentacji stałoprzecinkowej § Dla reprezentacji z 4 bitami częś ci ułamkowej, wartoś ci pojawiają się na osi w stałym odstępie ró wnym 2-4. § Liczby nie obecne na osi, nie będę reprezentowane dokładnie, będą reprezentowane jako przybliż enie do najbliż szej liczby maszynowej, a więc z błędem mniejszym niż 2-4. 30 Izabela Szczęch 15 Wprowadzenie do informatyki - ć wiczenia Arytmetyka w reprezentacji stałoprzecinkowej Arytmetyka w reprezentacji stałoprzecinkowej § Przy działaniach na liczbach stałoprzecinkowych w kodzie znak-moduł obowiązują te same reguły, co przy działaniach na całkowitych liczbach w kodzie znak-moduł. § Nadmiar (niedomiar) moż na wykryć , jeś li wystąpiło przeniesienie (lub poż yczka) na pozycję znakową. 32 Izabela Szczęch 16 Wprowadzenie do informatyki - ć wiczenia Arytmetyka w reprezentacji stałoprzecinkowej -zadania Zadania: Stosując dwó jkową stałoprzecinkową reprezentację znak--moduł (bit znaku, 7 bitó w na częś ć całkowitą i 8 bitó w znak na częś ć ułamkową) zapisz następujące liczby dziesiętne i wykonaj działania. Sprawdź poprawnoś ć otrzymanego wyniku przeliczając go na wartoś ć w systemie dziesiętnym. a) b) c) d) e) 1,125 + 20,5 -3,0 + (-2,5) -2,0625 + 6,25 127,03125 + 3,5 -120,25+(-10,015625) 33 Izabela Szczęch 17