Zmiennoprzecinkowy 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 Izabela Szczęch
Zapis zmiennoprzecinkowy - definicja i konwersje Zakresy liczb w reprezentacji zmiennoprzecinkowej Dokładność reprezentacji zmiennoprzecinkowej Arytmetyka w reprezentacji zmiennoprzecinkowej Problem utarty precyzji Plan zajęć Standardy reprezentacji zmiennoprzecinkowej Zapis zmiennoprzecinkowy - definicja i konwersja Izabela Szczęch
Wady zapisu stałoprzecinkowego zapis bardzo duż ych lub bardzo małych liczb w notacji stałoprzecinkowej jest niewygodny ponieważ wymaga duż ej liczby znakó w jeś li chcemy rozszerzyć zakres czy precyzję (liczbę miejsc po przecinku) musimy uż yć większej liczby znakó w dwanaś cie bilionó w: 000 000 000 000 trzydzieś ci trylionó w: 0 000 000 000 000 000 000 jedna bilionowa: 0,000 000 000 00 5 Zapis zmiennoprzecinkowy Zapis zmiennoprzecinkowy (ang. floating point numbers) zwany ró wnież postacią wykładniczą, notacją naukowa składa się z następujących elementó w: m mantysy, czyli liczby stałoprzecinkowej p podstawy systemu c cechy, czyli wykładnika potęgowego, do któ rego podnosimy podstawę systemu Wartość liczby zmiennoprzecinkowej L obliczamy według wzoru: c L ( FP) = m* p 6 Izabela Szczęch
Zapis zmiennoprzecinkowy Zapis zmiennoprzecinkowy wymaga znacznie mniejszej liczby znakó w niż stałoprzecinkowy przy zapisie bardzo duż ych lub bardzo małych liczb. Przykład dla systemu dziesiętnego: 000 000 000 000 =,x0 0 000 000 000 000 000 000 =,0x0 9 0,000 000 000 00 =,0x0-7 Zapis zmiennoprzecinkowy Położ enie przecinka w mantysie nie jest ustalone i moż e się dowolnie zmieniać. Poniż sze zapisy oznaczają tą samą liczbę: 5 x 0 0 =,5 x 0 =,5 x 0 = 0,05 x 0 4, itd. Zmiana położ enia przecinka w mantysie wpływa na wartość cechy liczby: przesunięcie przecinka o pozycję w lewo wymaga zwiększenia cechy o. przesunięcie przecinka o pozycję w prawo wymaga zmniejszenia cechy o. 8 Izabela Szczęch 4
Znormalizowany zapis Znormalizowana liczba zmiennoprzecinkowa to taka, w któ rej mantysa spełnia nieró wność: p > m Według tej definicji postacią znormalizowaną dla zapisó w: 5 x 0 0 =,5 x 0 =,5 x 0 = 0,05 x 0 4 jest jedynie zapis,5 x 0. 9 Binarny zapis zmiennoprzecinkowy W binarnym systemie zmiennoprzecinkowym m, p oraz c zapisane są dwó jkowo, a podstawa p jest zawsze ró wna. Z racji, ż e podstawa jest zawsze znana, do zapisania dwó jkowej liczby zmiennoprzecinkowej wystarczy podanie wartoś ci m, c oraz sposobu ich kodowania. 0 Izabela Szczęch 5
Binarny zapis zmiennoprzecinkowy W ramach ć wiczeń będziemy operować na 8-mio bitowych dwó jkowych liczbach zmiennoprzecinkowych (FP), w któ rych: 4 najstarsze bity są przeznaczone na zapis cechy w kodzie U, pozostałe 4 bity są na zapis mantysy ró wnież w kodzie U. Przyjmijmy też, ż e mantysa jest liczbą stałoprzecinkową (w kodzie U) z dwoma miejscami po przecinku. cecha mantysa b 7 b 6 b 5 b 4 b b b b 0 Konwersja binarnego zapisu FP na system dziesię tny Przykład: Oblicz wartość dziesiętną zmiennoprzecinkowej dwó jkowej liczby 00 (FP). c = (U) (U) = -8+4++= - (0) m = 0,0 (U) 0,0 (U) = + / 4 L (FP) = m* c = 5 / 4 * - = 5 / 4 * / = 5 / 8 00 (FP) = 5 / 8 (0) Izabela Szczęch 6
Konwersja binarnego zapisu FP na system dziesię tny Zadania: Oblicz wartość dziesiętną następujących zmiennoprzecinkowych liczb dwó jkowych: a) 000000 (FP) b) 00 (FP) c) 00 (FP) Konwersja z systemu dziesię tnego na zapis FP Algorytm przeliczania liczby dziesiętnej na liczbę zmiennoprzecinkową w innym systemie pozycyjnym: Przeliczamy daną liczbę dziesiętną na liczbę w systemie docelowym. Wynik jest wartoś cią mantysy przy cesze ró wnej 0. Normalizujemy mantysę modyfikując przy tym odpowiednio cechę liczby. 4 Izabela Szczęch 7
Konwersja z systemu dziesię tnego na zapis FP Przykład : Wyznacz dwó jkową zmiennoprzecinkową reprezentację liczby,5 (0),5 (0) =? (U) Z racji, ż e jest to stałoprzecinkowa liczba dodatnia, to z kodzie U wygląda tak samo jak w Znak-moduł. Konwertujemy ją zatem na ZM. Dostajemy:,5 (0) =00, (U) Tak by wyglądała reprezentacja przy cesze = zero czyli 0000 (U). Ale chcemy reprezentację z dwoma miejscami po przecinku, musimy więc przesunąć wszystkie bity o jedną pozycję w prawo i zwiększyć cechę o jeden. Wynik:,5 (0) =00000 (FP) c=000 (U), m=00 (U) 5 Konwersja z systemu dziesię tnego na zapis FP Sprawdzenie wyniku: L = 00000 (U) c = 000 (U) = (0) m = 0,0 (U) = 0*(- ) + * 0 + 0* - + - = / 4 L = m* c = / 4 * = 5 / 4 * = 0 / 4 =,5 00000 (FP) =,5 (0) 6 Izabela Szczęch 8
Konwersja z systemu dziesię tnego na zapis FP Przykład : Wyznacz dwó jkową zmiennoprzecinkową reprezentację liczby -, (0) -, (0) =? (U) Z racji, ż e jest to stałoprzecinkowa liczba UJEMNA, to aby ją przedstawić w kodzie U, szukamy najpierw zapisu wartoś ci, w kodzie U (któ ry jest toż samy z zapisem w kodzie Znak-moduł), a następnie szukamy liczby przeciwnej (przepisać wszystkie bity łącznie z pierwszą napotkaną jedynką a pozostałe bity zanegować ). +, (0) = 0,000000... (U)=(ZM) Jest to oczywiś cie wartość przybliż ona (,89 ), bo, nie jest liczbą maszynową. -, (0) = 0,0 (U) Tak by wyglądała reprezentacja przy cesze = zero czyli 0000 (U). 7 Konwersja z systemu dziesię tnego na zapis FP Przykład : -, (0) = 0,0 (U) Tak by wyglądała reprezentacja przy cesze = zero czyli 0000 (U). Mamy tylko dwa miejsca przed przecinkiem (nie zawierające samych zer), nie musimy zatem przesuwać bitó w. Cecha pozostanie bez zmian. Wynik: -, (0) = 00000 (FP) c=0000 (U), m=0 (U) 8 Izabela Szczęch 9
Konwersja z systemu dziesię tnego na zapis FP Sprawdzenie wyniku: L = 00000 (U) c = 0000 (U) = 0 (0) m = 0, (U) = *(- ) + 0* 0 + * - + * - = -+ / + / 4 = - 8 / 4 + / 4 = - 5 / 4 L = m* c = - 5 / 4 * 0 = - 5 / 4 * = -,5 00000 (FP) = -,5 ª -, 9 Konwersja z systemu dziesię tnego na zapis FP Zadania: Wyznacz dwó jkową zmiennoprzecinkową reprezentację poniż szych liczb dziesiętnych : a) -,5 b) 0, c) 9,5 d) - 0 Izabela Szczęch 0
Zakresy liczb w reprezentacji zmiennoprzecinkowej Zakresy liczb zmiennoprzecinkowych Wyznacz zakres dwó jkowych liczb zmiennoprzecinkowych reprezentowanych na 8-miu bitach (cecha w U to najstarsze 4 bity, pozostałe to mantysa w U z dwoma miejscami po przecinku). Poró wnaj wynik z zakresem liczb stałoprzecinkowych reprezentowanych na 8-miu bitach w kodzie znak-moduł z 4 miejscami po przecinku. Izabela Szczęch
Zakresy liczb zmiennoprzecinkowych Wzó r L (FP) = m* c przyjmuje wartość maksymalną dla maksymalnej cechy i maksymalnej mantysy. Cecha przyjmie wartość maksymalną dla kodu: 0 (U) = 7 (0) Mantysa największą wartość przyjmie dla kodu: 0, (U) = / 4 = 7 / 4 Zatem max (FP) = 7 / 4 * 7 = 7 / 4 * 8 = 7 * = 4 Zakresy liczb zmiennoprzecinkowych Wartość najmniejszą uzyskamy dla maksymalnej cechy i minimalnej mantysy. Cechę maksymalną: 0 (U) = 7 (0) Minimalną mantysę reprezentuje kod: 0,00 (U) = - (0) Zatem min (FP) = - * 7 = - * 8 = -56 Stąd wszystkie liczby reprezentowane przez nasz kod zawierają się w przedziale: Z (FP) = -56... 4 Na 8-miu bitach w kodzie znak-moduł z 4 miejscami po przecinku moż na reprezentować liczby w przedziału <, (ZM) ; 0, (ZM) > czyli z przedziału od -7 5 / 6 (0) do 7 5 / 6 (0). 4 Izabela Szczęch
Dokładność reprezentacji zmiennoprzecinkowej mantysa 0000 000 000 00 000 00 00 0 000 00 00 0 000 0 0000 0 / 4 / / 4 / 4 / / 4 - - / 4 - / - / 4 - - / 4 - / - / 4 000 0 / / / / -4 - / - - / - - / - - / 000 0 4 5 6 7-8 -7-6 -5-4 - - - 00 0 4 6 8 0 4-6 -4 - -0-8 -6-4 - 000 0 4 8 6 0 4 8 - -8-4 -0-6 - -8-4 c e c h a 00 0 8 6 4 40 48 56-64 -56-48 -40 - -4-6 -8 00 0 6 48 64 80 96-8 - -96-80 -64-48 - -6 0 0 64 96 8 60 9 4-56 -4-96 -80-8 -96-64 - 000 0 / 04 / 5 / 04 / 5 56 / 04 / 7 5 / 04 - / 8-7 / 04 - / 5-5 / 04 - / 56 - / 04 - / 5 - / 04 00 0 / 5 / 56 / 5 / 8 5 / 5 / 56 7 / 5 - / 64-7 / 5 - / 56-5 / 5 - / 8 - / 5 - / 56 - / 5 00 0 / 56 / 8 / 56 / 64 5 / 56 / 8 7 / 56 - / - 7 / 56 - / 8-5 / 56 - / 64 - / 56 - / 8 - / 56 0 0 / 8 / 64 / 8 / 5 / 8 / 64 7 / 8 - / 6-7 / 8 - / 64-5 / 8 - / - / 8 - / 64 - / 8 00 0 / 64 / / 64 / 6 5 / 64 / 7 / 64 - / 8-7 / 64 - / - 5 / 64 - / 6 - / 64 - / - / 64 0 0 / / 6 / / 8 5 / / 6 7 / - / 4-7 / - / 6-5 / - / 8 - / - / 6 - / 0 0 / 6 / 8 / 6 / 4 5 / 6 / 8 7 / 6 - / - 7 / 6 - / 8-5 / 6 - / 4 - / 6 - / 8 - / 6 0 / 8 / 4 / 8 / 5 / 8 / 7 4 / 8 - - 7 / 8 - / 4-5 / 8 - / - / 8 - / 4 - / 6 8 Izabela Szczęch
Dokładność reprezentacji FP Powyż sza tabela zawiera wszystkie wartoś ci, jakie moż e reprezentować zmiennoprzecinkowy kod przeznaczający po 4 bity na zapis cechy i mantysy w kodzie U (w mantysie dwa miejsca są po przecinku). Są to JEDYNE liczby maszynowe, czyli liczby jakie przy tej reprezentacji moż na dokładnie zapisać w komputerze. Pozostałe liczby wymierne są wyraż ane z pewnym przybliż eniem poprzez wykorzystanie liczb maszynowych. 7 Zadania: Dokładność reprezentacji FP Przeanalizuj gęstość ułoż enia na osi wartoś ci dziesiętnych odpowiadających dwó jkowym zmiennoprzecinkowym liczbom maszynowym. Zwróć uwagę, ż e liczb maszynowych w okolicy zera jest stosunkowo wiele, a im dalej od zera tym rzadziej się one pojawiają (inaczej niż przy reprezentacji stałoprzecinkowej, gdzie poszczegó lne liczby maszynowe były od siebie ró wno oddalone). Okreś l, któ ry element zapisu zmiennoprzecinkowego (cecha czy mantysa) odpowiada za zakres reprezentowanych liczb, a któ ry za ich precyzję? Odpowiedź uzasadnij. 8 Izabela Szczęch 4
Nadmiar i podmiar W reprezentacji zmiennoprzecinkowej nadmiarem nazywamy sytuację, gdy liczba jest tak duż a (co do modułu), ż e nie zawiera się w przedziale liczb reprezentowalnych, a podmiarem sytuację, gdy liczba jest tak mała (co do modułu), ż e musi być reprezentowana przez zero. 9 Arytmetyka w reprezentacji zmiennoprzecinkowej Izabela Szczęch 5
Dodawanie i odejmowanie Suma lub różnica dwó ch liczb zmiennoprzecinkowych L i L wynosi: c c L ± L = m ± m * * c c * c m * c c L ± L = m * ± c * c c c * c m * m L ± L = ± c L L ± L ± L m = c = Ê Á Ë m c * c + c m ± c m ± c ˆ * c + c * c + c * * c Dodawanie i odejmowanie Mantysa sumy (lub różnicy) jest sumą (lub różnicą) mantys liczb wyjś ciowych po wyró wnaniu ich cech czyli po sprowadzeniu ich do wspó lnej cechy c+c. Cecha sumy (lub różnicy) jest ró wna sumie cech dodawanych (lub odejmowanych) liczb. Po wykonaniu operacji arytmetycznej mantysa wyniku jest sprowadzana do postaci znormalizowanej i zapamiętywana w kodzie liczby zmiennoprzecinkowej. Izabela Szczęch 6
Dodawanie i odejmowanie W systemie dwó jkowym operacja dzielenia przez jest ró wnoważ na przesunięciu wszystkich bitó w zapisu liczby o jedną pozycję w prawo (jak w systemie dziesiętnym podział przez 0). Z kolei mnoż enie przez odpowiada przesunięciu wszystkich cyfr o jedną pozycję w lewo. Dzielenie lub mnoż enie przez potęgi liczby jest zatem przesuwaniem wszystkich bitó w o odpowiednią liczbę pozycji (ró wną wykładnikowi potęgi liczby ) w lewo (mnoż enie) lub w prawo (dzielenie). Obie operacje są bardzo proste i nie wymagają wykonywania ż adnych działań arytmetycznych (w procesorze realizują je układy zwane rejestrami przesuwnymi - ang. shift registers). Zadania Zadania: Wykonaj poniż sze działania na liczbach zmiennoprzecinkowych, a następnie sprawdź poprawność obliczeń konwertując liczby na system dziesiętny: a) 000 (FP) + 000 (FP) b) 000000 (FP) + 0000 (FP) c) 000 (FP) - 0000 (FP) d) 0000 (FP) - 000 (FP) 4 Izabela Szczęch 7
c + c = 0 (U) 6 Wprowadzenie do informatyki - ć wiczenia Rozwią zanie (b) 000000 (FP) + 0000 (FP) Z zapisu zmiennoprzecinkowego wydobywamy cechy i mantysy obu liczb: c = 000 (U) = 4; m = 0,00 (U) c = 00 (U) = ; m =,00 (U) Pierwszą mantysę musimy podzielić przez zatem bity przesuwamy o pozycje w prawo (brakujące pozycje z przodu wypełniamy jedynkami, bo jest to liczba ujemna; odpowiada to dopisywaniu zer przed liczbą dodatnią): m =,000 (U) Drugą mantysę musimy podzielić przez 4, zatem bity przesuwamy o 4 pozycję w prawo: m =,00 (U) 5 Obliczamy mantysę sumy:,000 +,00 -------------,000 Rozwią zanie (b) m + m =,000 (U) Obliczamy cechę sumy: 000 + 00 ------------ 0 Izabela Szczęch 8
Rozwią zanie (b) Mantysę sumy sprowadzamy do postaci znormalizowanej: c = 0 (U) ; m =,000 (U) jedynki z przodu liczby ujemnej są nieznaczące (tak jak zera przed liczbą dodatnią), pierwszym miejscem znaczącym jest druga od lewej jedynka. Mamy mieć dwie pozycje przed przecinkiem, musimy zatem przesunąć bity o pozycje lewo i zmniejszyć cechę o c = 0 (U) -000 (U) =00 (U) ; m = 0, (U) Otrzymaną cechę i mantysą łączymy w jeden kod i otrzymujemy wynik operacji dodawania: 000000 (FP) + 0000 (FP) = 000 (FP). 7 Sprawdźmy, czy wynik jest prawidłowy. W tym celu posługując się tabelką wyznaczamy wartoś ci poszczegó lnych liczb zmiennoprzecinkowych: 000000 (FP) = - 0000 (FP) = -8 000 (FP) =-40 Rozwią zanie (b) -+(-8)=-40 - wynik prawidłowy. 8 Izabela Szczęch 9
Nadmiar - przykład Zaobserwuj zjawisko nadmiaru pró bując wykonać dodawanie: 000 (FP) + 0000 (FP) (czyli 60 (0) + 80 (0) ) Wydobywamy cechy i mantysy: c = 0 (U) = 7; m = 0,0 (U) c = 00 (U) = 6; m = 0,0 (U) Pierwszą mantysę przesuwamy o 6 bitó w w prawo, a drugą o 7 bitó w w prawo: m = 00,0000000 (U); m = 00,000000 (U) Sumujemy cechy i mantysy: m + m = 00,00000 (U) ; c + c = 0 (U) Nie uda nam się znormalizować mantysy bez utraty precyzji, to nam sygnalizuje problem, któ ry w tym przykładzie wynika z wystąpienia nadmiaru. 9 Utrata precyzji Izabela Szczęch 0
Zadanie: Zsumuj dużą i małą liczbę i przeanalizuj wynik: 00000 (FP) + 00000 (FP) czyli 4 (0) + (0) Utrata precyzji 4 00000 (FP) + 00000 (FP) (czyli 4 (0) + (0) ) Wydobywamy cechy i mantysy: c = 000 (U) = 4; m = 0,0 (U) c = 000 (U) = ; m = 0,0 (U) Pierwszą mantysę przesuwamy o bit w prawo, a drugą o 4 bity w prawo: m = 00,000 (U); Sumujemy cechy i mantysy: m + m = 00,0 (U) ; m = 00,000 (U) Normalizujemy mantysę wyniku: c = 000 (U) ; Utrata precyzji m = 0,00 (U) c + c = 00 (U) Wynik dodawania: 00000 (FP) + 00000 (FP) = 00000 (FP) = 4 (0). 4 Izabela Szczęch
Utrata precyzji Wnioski: suma jest ró wna pierwszej z sumowanych liczb. Dodanie drugiej liczby nie wpłynęło na wynik sumowania. Nastąpiła utrata precyzji. W systemie zmiennoprzecinkowym sumowanie liczby duż ej z liczbą małą moż e być niedokładne z uwagi na utratę precyzji. Dlatego sumując ciąg liczb zawsze sumujmy od wartoś ci najmniejszych do największych. 4 Standardy reprezentacji zmiennoprzecinkowej Izabela Szczęch
Format IEEE 754 Aby ujednolicić wyniki obliczeń numerycznych wykonywanych na różnych platformach sprzętowych, wprowadzono ś ciś le okreś lony standard zapisu zmiennoprzecinkowego IEEE 754. Pełna nazwa standardu to: IEEE Standard for Binary Floating-Point Arithmetic Pierwsza wersja standardu obowiązywała od 985r, najnowsza, pod nazwą IEEE 754-008, została opublikowana w sierpniu 008 Obecnie praktycznie wszystkie implementacje sprzętowe liczb zmiennoprzecinkowych oparte są o ten standard 45 Standard IEEE 754(-985, -008) definiuje dwie podstawowe klasy binarnych liczb zmiennoprzecinkowych: binary - pojedynczej precyzji (ang. single-precision) binary 64 - podwó jnej precyzji (ang. double-precision) Format Bit znaku Bity cechy bity - pojedyncza precyzja 64 bity - podwó jna precyzja Format IEEE 754 bit 8 bitó w bity bit bitó w 5 bity Bity mantysy Standard IEEE 754-008 rozszerza też wersję IEEE 754-985 o definicje kilku formató w dziesiętnych liczb zmiennoprzecinkowych 46 Izabela Szczęch
Format IEEE 754 Reprezentacja zmiennoprzecinkowa IEEE 754 pojedynczej precyzji bit znaku: 0 oznacza liczbę dodatnią, ujemną cecha zapisywana jest w kodzie z nadmiarem (dla 8-mio bitowego zapisu nadmiar wynosi 7, zatem w polu cechy moż na zapisać wartoś ci od -7 do 8) mantysa zapisywana jest w stałoprzecinkowym kodzie U. 47 Format IEEE 754 Standard IEEE 754-008 definiuje nie tylko sposó b reprezentacji liczb, ale takż e: sposó b reprezentacji specjalnych wartoś ci, np. nieskończonoś ci, zera sposó b wykonywania działań na liczbach zmiennoprzecinkowych sposó b zaokrąglania liczb 48 Izabela Szczęch 4