URZĄDZENIA TECHNIKI KOMPUTEROWEJ Stało- i zmiennopozycyjna reprezentacja liczb binarnych Zapis stałoprzecinkowy Aby umożliwić również zapis liczb ułamkowych, musimy rozszerzyć wagi pozycji w stronę ujemnych potęg podstawy. Część ułamkową oddzielimy od części całkowitej zapisu za pomocą znaku przecinka. waga pn-1 … p2p1p0 , p-1p-2 … p-m cyfry an-1 … a2a1a0 , a-1a-2 … a-m Binarną liczbę stałoprzecinkową można potraktować jako złożenie dwóch części — liczby całkowitej oraz ułamkowej rozdzielonych przecinkiem: URZĄDZENIA TECHNIKI KOMPUTEROWEJ URZĄDZENIA TECHNIKI KOMPUTEROWEJ Zamianę liczby dziesiętnej na postać binarną przeprowadza się w dwóch etapach: • zamiana liczby całkowitej na postać binarną za pomocą cyklicznego dzielenia przez 2; • zamiana części ułamkowej na postać binarną za pomocą cyklicznego mnożenia przez 2. Jeżeli wynik jest > 1, to wyznaczony bit części ułamkowej jest także równy 1. Do dalszych obliczeń wykorzystujemy część ułamkową wyniku. Proces należy kontynuować aż do otrzymania 0. Z wyników iloczynów pobieramy wartości całkowite — ułamek liczby binarnej. Otrzymane liczby łączymy, przedzielając część całkowitą i ułamkową przecinkiem. Jeżeli mnożenie przez 2 prowadzi do osiągnięcia nieskończenie długiej kombinacji zer i jedynek, należy przyjąć przybliżoną dokładność, np. do 10 miejsc po przecinku. URZĄDZENIA TECHNIKI KOMPUTEROWEJ Przykład 10,225 czy wynik nie jest większy lub równy 1 URZĄDZENIA TECHNIKI KOMPUTEROWEJ Przykład 10,225 czy wynik nie jest większy lub równy 1 URZĄDZENIA TECHNIKI KOMPUTEROWEJ Przykład Obliczyć wartość liczby dwójkowej 11101,011B 11101,011B = 1 * 2-3 + 1 * 2-2 + 0 * 2-1 + 1 * 20 + 0 * 21 + 1 * 22 + 1 * 23 + 1 * 24 11101,011B = 1 * 1/8 + 1 * 1/4 + 0 * 1/2 + 1 * 1 + 0 * 2 + 1 * 4 + 1 * 8 + 1 * 16 11101,011B = 1/8 + 1/4 + 1 + 4 + 8 + 16 11101,011B = 29 3/8 Przykład Zamienić ułamek 12.7 na postać binarną 8-bitową, gdzie przecinek jest po czterech bitach !!!!!!! Etap 1 Część całkowita 12D to w postaci dwójkowej 1100B. Etap 2 Obliczanie części ułamkowej wygląda następująco: 0.7 * 2 = 1.4 -> 1 0.4 * 2 = 0.8 -> 0 0.8 * 2 = 1.6 -> 1 0.6 * 2 = 1.2 -> 1 0.2 * 2 = ….. – tutaj przerywamy obliczenia i stąd 12.7D = 1100,1011B Zapis zmiennopozycyjny Z zapisem zmiennoprzecinkowym można spotkać się w przypadkach, gdzie przy jego pomocy przedstawia się albo bardzo duże wartości, albo bardzo małe. Zapis ten nazywa się często notacją naukową, np.: Gwiazda Proxima Centauri znajduje się w odległości 9460800000000 [km], czyli 9,4608 * 1012. Masa elektronu wynosi me = 0,00000000000000000000000000091095 [g], czyli 9,1095 x 10-28 [g] 1.4.2. Liczby zmiennoprzecinkowe (zmiennopozycyjne) W porównaniu z liczbami stałoprzecinkowymi liczby zmiennoprzecinkowe (ang. floating-point numbers — FP) umożliwiają obsługę większego zakresu liczb (bardzo małych lub bardzo dużych), jednak kosztem wolniejszego przetwarzania i mniejszej dokładności. Termin „zmiennoprzecinkowe" oznacza, że nie istnieje stała liczba cyfr przed przecinkiem i po przecinku. Liczba zapisana w systemie zmiennoprzecinkowym składa się z dwóch części: liczby stałoprzecinkowej, której wartość bezwzględna jest mniejsza od wartości podstawy systemu pozycyjnego oraz z podstawy podniesionej do pewnej potęgi zwanej wykładnikiem lub cechą. Wartość liczby jest równa iloczynowi części stałoprzecinkowej i wykładniczej: w = m * be, m - mantysa, b - podstawa systemu, e - wykładnik potęgowy. 1111 1001 Liczymy cechę! 1111 e = 1(-23)+1*22+1*21+1*20 = -8 +4 +2 +1 = -1 1111 1001 Liczymy mantysę! 1001 – dzielimy na dwie części 10,01 traktujemy jak liczbę stałoprzecinkową z przedziału 1,2 10,01 m = 1(-21)+0*20+0*2-1+1*2-2 = -2 +0 +0 +1/4 = -2+1/4 = -1 ¾ = -1,75 1111 1001 cecha e = -1 LFP = m*2e LFP = -1,75 * 2-1 = -1,75 * ½ = -1,75 * 0,5 = - 0,875 mantysa m = -1,75 Zadanie - ćwiczenie Oblicz wartość liczby 00010100B e = 0*(-23) + 0*22 + 0*21 + 1*20 = 0 + 0 +0+ 1 = 1 M 01,00 m = 0*(-21) + 1*20 + 0*2-1 +0*2-2 = 0+1+0+0=1 LFP = 1*21=2 Zadanie do samodzielnej analizy Obliczanie reprezentacji zmiennoprzecinkowej Mamy określony format zapisu liczby zmiennoprzecinkowej w systemie dwójkowym. Wiemy, że wykładnik ma zawierać n bitów w kodzie U2, a cecha m bitów w zapisie stałoprzecinkowym U2. Przykład prostego systemu zmiennoprzecinkowego, w którym wykładnik i cecha mają po 4 bity długości. Przykładową liczbą niech będzie wartość 56: 56D = 111000B = 0111000U2 - dodajemy zero, aby zaznaczyć, iż jest to liczba dodatnia. Zapiszemy wzór obliczeniowy, a następnie będziemy przesuwać w prawo cyfry mantysy dodając jednocześnie 1 do wykładnika, aż znacząca jedynka znajdzie się na pozycji o wadze 1/2. 0111000,000U2 =20000U2 011100,000U2 =20001U2 - przesuwamy cyfry mantysy w prawo, zwiększamy wykładnik 01110,000U2 =20010U2 0111,000U2 =20011U2 011,100U2 =20100U2 01,110U2 =20101U2 0,111U2 =20110U2 - kończymy, mantysa jest znormalizowana Otrzymujemy więc: e = 0110 = 6D m = 0,111 = 7/8, sprawdzamy: 7/8 x 26 = 448/8 = 56 Dla liczby 9D 9D = 1001B = 01001U2 01001,000U2 =20000U2 0100,100U2 =20001U2 010,010U2 =20010U2 01,001U2 =20011U2 - ostatnia jedynka zaraz zniknie!!! 0,100U2 =20100U2 - koniec Otrzymaliśmy wynik: e = 0100 = 4D m = 0,100 = 1/2, sprawdzamy: 1/2 * 24 = 16/2 = 8 9D =? 01000100ZP