Studiuję nad przedstawieniem liczb ułamkowych jako wartości zmiennoprzecinkowych. Będzie to reprezentacja 8-bitowa. Gdzieś w tekście jest powiedziane, że:
„Używamy pierwszego bitu do reprezentacji znaku (1 dla wartości ujemnych, 0 dla wartości dodatnich), następne cztery bity dla sumy 7 i rzeczywisty wykładnik (dodajemy 7, aby uwzględnić ujemne wykładniki), i ostatnie trzy bity dla „części ułamkowej mantysy”
Teraz pytanie to: Dlaczego „7” – a nie inną wartość – należy dodać do rzeczywistego wykładnika?
Komentarze
- Witamy w CS.SE! Tekst w nawiasach podpowiada dlaczego. Nawiasem mówiąc, jeśli nie ' nie rozumiesz wyjaśnienia w jednym tekście, ' często pomaga znaleźć inne wyjaśnienie tematu . Istnieje wiele zasobów dotyczących zmiennoprzecinkowych.
- Dlaczego więc należy dodać 7?
- Jeśli ' zrozumiałeś odpowiedź na swoje pierwsze pytanie, zachęcam do edycji swojego posta, aby pokazać, co rozumiesz.
Odpowiedz
4 bity, które możesz reprezentować 16 różnych wartości: 0,1, …, 15. Jeśli chcesz zezwolić na ujemne wykładniki, warto przyjąć (w przybliżeniu) połowę możliwych wartości jako ujemny wykładnik. Dodając 7 do wykładnika, mapujesz wartości -7, -6, …, 0,1, …, 8 do reprezentowalnego zakresu. Możesz również sprawdzić uzupełnienia do dwóch .
Komentarze
- Zatem dodanie 7, map -7, -6, …, – 1 do odpowiadających im wartości dodatnich i dodanie wartości większej niż 7 skutkuje wartością poza zakresem, która jest niepoprawna. Z tego samego powodu dodanie mniej niż 7 do wykładnika nie ' nie rozwiązuje problemu. Dzięki, ' mam to, czego szukałem.
- Dodanie różnych liczb zmienia, które ujemne i które dodatnie wykładniki są obsługiwane. To ' jest decyzją projektową. Może po prostu wsparcie -1 jest wystarczające dla twojej aplikacji.
- Tak masz rację. To jest decyzja projektowa, którą instruktor zaimplementował za pomocą samouczka i nie jest ' ścisłym ograniczeniem.
- Decyzja o użyciu przesunięcia zamiast 2 ' uzupełnieniem IIRC było zachowanie odwrotności najmniejszej wartości mniejszej niż największy va lue, tj. aby uniknąć przepełnienia. Innymi słowy, został starannie wybrany.
- @KWillets: Przesunięcie pozwala również na przedstawienie zera jako zer i pozwala na użycie porównań całkowitych do porównywania liczb zmiennoprzecinkowych (z wyłączeniem bitu znaku)