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
Plan zajęć Zapis stałoprzecinkowy bez znaku - definicja i konwersje Zapis stałoprzecinkowy ze znakiem - definicja i konwersje Zakresy liczb w reprezentacji stałoprzecinkowej Dokładność reprezentacji stałoprzecinkowej 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
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 10 3 10 2 10 1 10 0 10-1 10-2 10-3 10-4 10-5 Cyfry zapisu 3 5 7 9, 8 2 9 1 4 Część całkowita Część ułamkowa 6 Izabela Szczęch 3
Binarny zapis stałoprzecinkowy bez znaku Wagi pozycji 2 3 2 2 2 1 2 0 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) = 2 3 + 2 1 + 2-1 + 2-2 + 2-5 = 8 + 2 + 1 / 2 + 1 / 4 + 1 / 32 = 10 25 / 32 7 Liczba wymierna L zapisana w systemie pozycyjnym o podstawie P w postaci ciągu cyfr ma wartość liczbową c n-1 c 1 c 0 c -1 c -m (P) w = c n-1 P n-1 + c n-2 P n-2 + + c 1 P 1 + c 0 + c -1 P -1 + + c -m P -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 Zapis stałoprzecinkowy bez znaku (bz) 1010,11001 (2) = 2 3 + 2 1 + 2-1 + 2-2 + 2-5 = 8 + 2 + 1 / 2 + 1 / 4 + 1 / 16 = 10 13 / 16 8 Izabela Szczęch 4
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) = 2 5 +2 4 +2 2 +2-1 +2-2 +2-3 +2-5 +2 6 =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) = 2 5 +2 4 +2 3 +2 1 +2 0 = 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) 10 Izabela Szczęch 5
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 c i 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. w 0 2. i n - 1 3. w c i + w x P 4. jeś li i = -m, to w w x P -m i kończymy 5. i i - 1 6. wróć do punktu 3 12 Izabela Szczęch 6
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) 110,0011 (2) b) 213,132 (4) c) 21,11 (3) d) 75,402 (8) 14 Izabela Szczęch 7
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) =2 1 +2-3 +2-4 = 2+ 1 / 8 + 1 / 16 = 2 3 / 16 = 2,1875 (10) 2,21 (10) 16 Izabela Szczęch 8
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 r m, 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 r m, 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 2 4 = 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
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 3 2 = 9, zaokrąglamy w dół do wartoś ci całkowitej i przeliczamy na system dwó jkowy: 12 8 / 9 x 9 = 116 w 116 div 3 = 38 i reszta 2 w 38 div 3 = 12 i reszta 2 w 12 div 3 = 4 i reszta 0 w 4 div 3 = 1 i reszta 1 w 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) b) 8,13 (10) c) 120,125 (10) (10) (2) (10) (4) (10) (5) 20 Izabela Szczęch 10
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 znak-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. 22 Izabela Szczęch 11
Konwersje - ZADANIA Zadanie 1: Oblicz wartość dziesiętną podanych stałoprzecinkowych liczb dwó jkowych zapisanych w kodzie znak-moduł a) 101010,10 b) 011110,11 c) 111111,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 b) 0,1 c) -2,0625 d) -1,13 23 Zakres liczb w dwó jkowej reprezentacji stałoprzecinkowej Izabela Szczęch 12
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 znak-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: 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 i-bitowych dwó jkowych liczb stałoprzecinkowych w kodzie ZM, gdzie najstarszy bit to bit znaku, część całkowita jest n-bitowa, a część ułamkowa m-bitowa. 26 Izabela Szczęch 13
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ą 2 n 1 Część ułamkowa będzie największa, gdy wszystkie jej bity ustawione zostaną na 1. Dla m bitó w wartość takiej liczby wyniesie (2 m - 1) / 2 m Łączymy obie częś ci i otrzymujemy zakres liczby w kodzie ZM: - (2 n -1+ m 2-1 ); m 2 2 n -1+ 2 m 2-1 m 27 Dokładność reprezentacji stałoprzecinkowej Izabela Szczęch 14
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
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
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 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) 1,125 + 20,5 b) -3,0 + (-2,5) c) -2,0625 + 6,25 d) 127,03125 + 3,5 e) -120,25+(-10,015625) 33 Izabela Szczęch 17