Sunday 10 December 2017

Znormalizowane mantyzy opcje binarne


Jak reprezentować 0.148 2 w znormalizowanej arytmetycznej liczbie zmiennoprzecinkowej w formacie (0.148) (0.00100101111). 2 Przesuwamy 3 bity na lewo, aby znormalizować (1.00101111) 2 2. Wynalazek 1164 (75) (1001011) 2 i Mantissa (01001111) 2. Tak więc reprezentacja zmiennoprzecinkowa jest (0100101100101111) 2 (4B2F) Reprezentacja A Ale jeśli przechowujemy denormalizowaną mantyzę w 8-bitowym rejestrze, wtedy nie zapisano ostatnich trzech 1s, a mantysa znów znów znów (0.00100101) 2 (1.00101000 ) 2 przez wstawienie 3 0s zamiast 1s. Procesor bierze pod uwagę denormalizowane bity mantyki poza 8 bitów lub też zaokrągla to, co jest poprawne: A lub B Czy przechowuje mantyzę w stałej reprezentacji punktowej Jak to wszystko pracuje trochę mylące, jak normalizować liczby w C. Wiem, że jeśli masz coś w rodzaju zmiennej binarnej wartości 1101.101, znormalizowane jest jako 1.101101 x 23 przez przemieszczanie miejsc po przecinku dziesiętnym 3 w lewo. Nie jestem jednak pewien, jak to zrobić w kodzie. Więc jeśli mam 10010000 exp 0 i chcę uzyskać wartość 01001000 exp 1, to ułamkowe pole to 001, a końcowy wynik to 010001. Jeśli mam 8-bitową liczbę, a pierwsze 2 bity to 00, chcę ją przenieść, aż ja znaleźć 1, lub jeśli mam wiodący bit 01, to jest już znormalizowane. Similary za wiodące 2 bity po 11 ruszę w lewo. Więc jeśli mój numer to 32 bity, 1 dla znaku, 8 dla wykładnika, 23 dla mantysy, czy zrobię coś podobnego: A potem kilka więcej, jeśli stwierdzenia dla pozostałych 2 wiodących numerów bitów (00, 10) nie jestem czy mój kod logiczny jest słuszny. Jak mówisz, musisz wyciągnąć znak, mantyzę i wykładnik. Powyższy schemat pochodzi z Wikipedii pokazuje jak to jest określone dla najbardziej popularnego formatu zmiennoprzecinkowej pojedynczej precyzji, IEEE 754. Aby wyodrębnić każdą część, musimy to zrobić w trzech krokach opisanych poniżej. Nie mam kodu C, ale pokażę kroki, które musisz podjąć. Po wydobywaniu 3 części po prostu umieść je w położeniach bitowych pokazanych na powyższym diagramie. Jeśli jego numer niepodpisany jest zawsze 0. Jeśli podpisał swój MSB. 2. Wykładnik Jeśli liczba jest podpisana i ujemna, musisz przekręcić wszystkie bity i dodać 1, aby uzyskać wartość dodatnią. Jeśli nie, możesz pozostawić to tak, jak jest. Aby wyznaczyć wykładnik, musimy wiedzieć, gdzie ma być punkt binarny. Niech położenie punktu binarnego będzie b (W Twoim przykładzie jego 3). Niech pierwszy bit z MSB, który jest 1 be p (W swoim przykładzie jego 6). Wywoływanie wykładnika e. 3. Mantissa Będzie to równe bitom od pozycji p-1 do bitowej 0.Im próbuje przekonwertować int na niestandardowy float, w którym użytkownik określa ilość bitów zarezerwowanych dla exp i mantysę, ale ja dont zrozum, jak działa konwersja. Moja funkcja zajmuje wartość int i int exp reprezentująca liczbę (wartość 2exp), tj. Wartość 12, exp 4, zwraca 192. ale nie rozumiem procesu, który muszę zrobić, aby je zmienić. Ive patrzył na to od wielu dni i gry z IEEE konwerter aplikacji internetowych, ale po prostu nie rozumiem, co proces normalizacji jest. Jak widzę, że jego przesunięcie punktu binarnego i dostosowanie wykładnika, ale nie mam pojęcia co to oznacza, każdy może dać mi przykład, aby przejść poza Również ja dont zrozumieć, co ma tendencję wykładniczą. Jedyne co mam to, że po prostu dodajesz numer do swojego wykładnika, ale nie rozumiem dlaczego. Szukam Google na przykład mogę zrozumieć, ale to nie ma sensu dla mnie zapytał Marzec 15 w 23:31 U2EF1 więc skąd mam wiedzieć, ile razy musi być przesunięty na przykład Podobnie, jeśli użytkownik specyfikuje 4 bity dla mantyzą, a wartością jest 3, skąd mam wiedzieć, aby przesunąć 0011 na 1000 Czy mogłabym mieć coś takiego jak maxval pow (2, nieokreślony mant. bitsgt) -1, a następnie wartość shift (0011) aż do wartości gt maxval i mieć licznik śledzić, ile razy robię to ndash Tommy K Marzec 15, 2017 at 23:51 Numer zmiennoprzecinkowy jest znormalizowany, gdy zmusimy całkowitą część jego mantyzmy, aby była dokładnie 1 i umożliwić jego części frakcji być cokolwiek my lubić. Na przykład, gdybyśmy zajęli numer 13.25. czyli 1101,01 w binarnym, 1101 byłaby liczbą całkowitą, a 01 byłaby częścią frakcji. Mogłem reprezentować 13,25 jako 1101,01 (20). ale nie jest normalizowany, ponieważ część całkowita nie jest 1. Jednakże. możemy przesunąć mantyzę do prawej jednej cyfry, jeśli zwiększymy wykładnik o 1: To reprezentacja 1.10101 (23) jest znormalizowaną formą 13.25. To powiedziawszy, wiemy, że znormalizowane liczby zmiennoprzecinków zawsze będą występować w postaci 1.fffffff (2exp) W celu zwiększenia wydajności, nie przejmujemy się przechowywaniem 1 części całkowitej w samej reprezentacji binarnej, po prostu udamy, że tam jest. Więc gdybyśmy mieli mantyzę wykonywać na zamówienie 5-krotne pływające pistolety, z pewnością dowiemy się, że bity 10100 faktycznie wytrzymałyby 1.10100. Oto przykład ze standardową 23-bitową mantyzą: Jeśli chodzi o wykładnicę wykładniczą, spójrz na standardowy format 32-bitowego pływaka podzielony na 3 części: 1 znak bitowy, 8 bitów wykładników i 23 mantysze : Wykładnicy 00000000 i 11111111 mają specjalne cele (np. Reprezentują reprezentacje reprezentujące reprezentację reprezentowaną przez Inf i NaN), więc z 8 bitami wykładni możemy na przykład reprezentować 254 różne wykładniki, np. 21 do 2254. Ale co jeśli chcemy reprezentować 2-3. Jak uzyskać negatywne wykładniki Format rozwiązuje ten problem, automatycznie odejmując 127 od wykładnika. Dlatego: 0000 0001 wynosi 1 -127 -126 0010 1101 wynosi 45 -127 -82 0111 1111 wynosi 127-127 0 1001 0010 wyniesie 136-127 9 Zmienia to zakres wykładników od 21. 2254 do 2-126. 2127, więc możemy reprezentować negatywne wykładniki. Proces normalizacji przekształca wejścia w zakres wyboru. binary32 oczekuje, że significand (nie mantysa) będzie w zakresie 1.0 lt s lt 2.0, chyba że liczba ma minimalny wykładnik. Przykład: wartość 12, exp 4 jest taka sama jak wartość 12 (222), exp 4 3 wartość 1.5, exp 7 Ponieważ significand zawsze ma pierwszą cyfrę 1 (chyba że liczba ma minimalny wykładnik), nie ma potrzeby je przechowywać. Zamiast zapisywać wykładnik jako 7. dodaje się do niego 127 stronniczości. wartość 1,5 decimal - 1.1000. 000 binarnych - 0,1000. 000 przechowywanych binarnych (23 bity we wszystkich) exp 7 - przekłamań exp 7 127 - 134 decimal - 10000110 binarnych Binarny wzór przechowywany jest konkatenacją znaku, significand z wiodącym 1 bitiem implikowanym i wykładnikiem wykładniczym Kiedy stronniczy wykładnikiem jest 0 - wartość minimalna, domniemany bit jest równy 0, a więc można zapisać małe liczby, takie jak 0.0. Gdy wykładnicza wykładniczka wynosi 255 - wartość maksymalna, przechowywane dane nie reprezentują już skończonych liczb, ale nieskończoności i liczb nie-a. Sprawdź link referencyjny, aby uzyskać więcej informacji. Tommy - chux i eigenchris, wraz z innymi, dostarczyły znakomitych odpowiedzi, ale jeśli dobrze przyjrzymy się Twoim komentarzom, nadal wydaje się, że walczysz o nakrętki i śruby, jak sobie z tym poradzę, a następnie użyj tego w tworzeniu niestandardowej reprezentacji zmiennoprzecinkowej, gdzie użytkownik określa ilość bitów dla wykładowca Nie czuć się źle, jest jasne jak błoto raz za pierwszym razem, gdy go przechodzisz. Myślę, że mogę płukać, czyszcząc to. Zapoznaj się z przedstawieniem IEEE754-Single-Precision-Floating-Point: że 1-bitowy znak bitowy. 8-bitowy wykładniczy wykładnik (w 8-bitowym nadmiarze-127 notacji), a pozostała 23-bitowa mantysa. Gdy użytkownik zezwoli użytkownikowi na wybranie liczby bitów w elemencie wykładowym, musisz zmodyfikować notatnik wykładnika, aby mógł pracować z nowym limitem wybranym przez użytkownika. Co to zmieni Czy zmieni obsługę znaków - Nie. Czy zmieni manipulacje mantysą - nie (nadal będziesz konwertować mantissasignificand na ukryty format bitowy). Więc jedyną rzeczą, na którą musisz skupić się jest obsługa wykładników. Jak zbliżysz się do tego przypomnienia, obecny 8-bitowy wykładnik znajduje się w tzw. Nadmiarowej-127 (w której 127 reprezentuje największą wartość dla 7 bitów, co pozwala na umieszczenie i wyrażenie jakichkolwiek stronniczości w obrębie bieżącego limitu 8-bitowego. użytkownik wybiera 6 bitów jako wielkość wykładnika, a następnie co będziesz musiał podać podobną metodę, aby upewnić się, że masz ustaloną liczbę reprezentującą nową notatkę nadmiarową, która będzie działać w ramach limitu użytkownika. Zrób 6-bitowy limit użytkownika, a następnie wybór dla nieuzasadnionej wartości wykładniczej można wypróbować jako 31 (największe wartości, które mogą być reprezentowane w 5-bitowych).Do tej można zastosować tę samą logikę (przy powyższym przykładzie 13.25).Butylna reprezentacja numeru to 1101.01 do którego przesuwa się 3 miejsca po przecinku w lewo, aby uzyskać 1.10101, co daje wykładniczą tendencję 3. W swoim 6-bitowym wykładniku dodano 3 31, aby uzyskać nadmiar-31 notacji dla wykładnika: 100010. następnie umieścić mantyzę w ukrytym formacie bitowym (np przynosząc 1 z 1.10101, co doprowadziło do powstania nowego niestandardowego przedstawienia Tommy'ego Precision: z 1-bitowym znakiem. 6-bitowy wykładniczy wykładnik (w 6-bitowym nadmiarze-31 notacji), a pozostałą 25-bitową mantyzę. Te same zasady miałyby zastosowanie do odwrócenia procesu, aby uzyskać numer zmiennoprzecinkowy z powyższego zapisu. (używając tylko 31 zamiast 127, aby wyeliminować bias z wykładnika) Mam nadzieję, że to pomaga w jakiś sposób. Nie widzę dużo innego, jeśli możesz naprawdę pozwolić na wybrany przez użytkownika rozmiar wykładniczy. Pamiętaj, że standard IEEE-754 nie był czymś, co było przypuszczalne, a wiele dobrych powodów i kompromisów przybyło na układ 1-8-23 znak-wykładnik-mantyz. Myślę jednak, że Twoje ćwiczenia robią świetną robotę wymagając, abyś zdecydowanie zrozumiał standard. Teraz całkowicie utracone i nie poruszone w tej dyskusji jest to, jakie efekty miałyby w zakresie liczb, które mogłyby być reprezentowane w tym niestandardowym precyzyjnym punkcie pływającym. I havent spojrzał na to, ale podstawowym ograniczeniem wydaje się być zmniejszenie MAXMIN, które mogą być reprezentowane. odpowiedział Mar 2 15 w 10:53

No comments:

Post a Comment