Siemka, aktualnie przygotowuje się do egzaminu wstępnego na studia magisterskie z informatyki i mam pewną zagwozdkę z kilkoma zadaniami dotyczącymi liczb zmiennoprzecinkowych.
Treść zadań:
1) Dana jest następująca reprezentacja liczb zmiennopozycyjnych: Mantysa zajmuje 22 bity w tym bit znaku, cecha zajmuje 10 bitów w tym bit znaku. Cecha i mantysa zapisywane są w kodzie U2. Przecinek leży na lewo od mantysy (mantysa jest ułamkiem [1/2..1]). Jaka jest największa możliwa liczba w tym systemie?
2) Dana jest następująca reprezentacja liczb zmiennopozycyjnych: Mantysa zajmuje 20 bitów, wykładnik zajmuje 8 bitów; Wykładnik i mantysa zapisywane są w kodzie U2; Przecinek leży na lewo od mantysy; Z dokładnością do ilu cyfr dziesiętnych można pamiętać liczby w tej reprezentacji?
Uściślając nie wiem jak poprawnie zapisać mantysę tak aby było to zgodne z treściami powyższych zadań.
W 1) zadaniu jest powiedziane, że "Mantysa zajmuje 22 bity w tym bit znaku", takie samo założenie w przypadku cechy. Moim zdaniem stwierdzenie "w tym bit znaku" jest redundantne, jako że każde słowo liczbowe zapisane w systemie U2 zawiera bit znaku i jest to bit o największym znaczeniu. Będę wdzięczny za potwierdzenie.
Drugi problem mam z założeniem "Przecinek leży na lewo od mantysy" w obu zadaniach. To także wydaje mi się informacją niepotrzebną, ponieważ mantysa w liczbie zmiennoprzecinkowej jest ułamkiem i przecinek powinien znajdować się tuż za bitem o największym znaczeniu. Nie daje mi spokoju tylko to, że to założenie jakby wymusza pozycję przecinka przed bitem o największym znaczeniu, czyli taka mantysa mogła by przyjąć postać:
| Przecinek za bitem o największym znaczeniu |
"Przecinek leży na lewo od mantysy" |
| x.xxx....xxx |
.xxx...xxx |
No i tu pojawia się problem bo w zależności od tego gdzie przyjmę domyślne miejsce dla przecinka bit o największym znaczeniu będzie miał różne wagi:
Dla pierwszej kolumny: -2^0 = -1
Dla drugiej kolumny: -2^(-1) = -1/2
Czyli różne wagi dla bita o największym znaczeniu, dadzą nam różne zakresy mantysy. Intuicja (i literatura) podpowiadają, że zapis gdzie przecinek jest za bitem o największym znaczeniu jest poprawny i mantysa będzie przyjmować wartości z zakresu [-1; 1 - 2^(1-n)]. I taką postać mantysy przyjmuje podczas rozwiązywania tych zadań.
Jeszcze jedna, obiecuję ostatnia już zagwozdka. W treści pierwszego zadania mamy podany przedział wartości mantysy [1/2; 1]. Czy to oznacza, że bit znaku jest zawsze równy 0, a maksymalna wartość mantysy w postaci binarnej to: 0.111...111, a w systemie dziesiętnym 1 (no prawie, bo dokładnie 1-2^(-21)), z kolei minimalna to w postaci binarnej 0.100...000, w systemie dziesiętnym 1/2?
W pierwszym zadaniu otrzymałem, że największa możliwa liczba w tak zadanym systemie to 2^511 czyli +-10^(153,83). Odpowiedź do drugiego zadania to: +-5.7197 czyli z możemy zapamiętać około 5/6 cyfr dziesiętnych w tej reprezentacji.