Próbuję obliczyć min / maks lub najniższy do największego zakresu wartości 48-bitowego typu zmiennoprzecinkowego MIL-STD-1750A (PDF) (WIKI) .

Np. jak podwójny zakres wynosi 1,7E +/- 308

Rozejrzałem się za równaniami i nie jestem pewien, czy to, co znalazłem, zadziała.

Pierwsze równanie, które znalazłem, to pierwsze równanie

Drugim było drugie równanie

Nie jestem pewien, od czego zacząć, jeśli są poprawne w tym, czego potrzebuję.

Czy ktoś przekaże mi swoją wiedzę i pomoże rozwiązać ten problem?

Komentarze

  • OK, wygląda na to, że masz 48-bitowy numer FP zaimplementowane na sprzęcie 16-bitowym. Co dokładnie masz na myśli, mówiąc ", znajdź wartość min / max "?
  • coś złego z a<b?a:b i a>b?a:b
  • Ja też nie mam jasności. Czy próbujesz porównać dwie liczby w ramach danego epsilonu ? Czy próbujesz określić możliwy zakres, który może mieścić się w marginesie błędu tej wartości? Coś innego? Potrzebujemy więcej kontekstu.
  • Przepraszamy, edytuję pytanie, aby wyjaśnić. Chciałbym obliczyć zakres, w którym 48-bitowa wartość FP, sformatowana w MIL-STD-1750A, może wynosić od wartości minimalnej do maksymalnej.

Odpowiedź

Dla 32-bitowych wartości zmiennoprzecinkowych maksymalna wartość jest pokazana w Tabeli III:

0.9999998 x 2^127 represented in hex as: mantissa=7FFFFF, exponent=7F. 

można rozłożyć mantysę / wykładnik na (bliską) wartość dziesiętną w następujący sposób:

7FFFFF <base-16> = 8,388,607 <base-10>. 

Istotność ma 23 bity, więc dzielimy 8 388 607 przez 2 ^ 23 .

8,388,607 / 2^23 = 0.99999988079071044921875 (see Table III) 

aż do wykładnika:

7F <base-16> = 127 <base-10> 

i teraz pomnożymy mantysę przez 2 ^ 127 (wykładnik)

8,388,607 / 2^23 * 2^127 = 8,388,607 * 2^104 = 1.7014116317805962808001687976863 * 10^38 

Jest to największa 32-bitowa wartość zmiennoprzecinkowa, ponieważ używana jest największa mantysa i największy wykładnik.

48-bitowy zmiennoprzecinkowy dodaje 16 bitów mantysy o mniejszym znaczeniu, ale pozostawia wykładnik tej samej wielkości. Zatem maksymalna wartość byłaby przedstawiona w postaci szesnastkowej jako

mansissa=7FFFFFFFFF, exponent=7F. 

ponownie możemy obliczyć

7FFFFFFFFF <base-16> = 549,755,813,887 <base-10> 

maksymalny wykładnik nadal wynosi 127, ale musimy podzielić przez [23 + 16 = 39, więc:] 2 ^ 39. 127-39 = 88, więc po prostu pomnóż przez 2 ^ 88:

549,755,813,887 * 2^88 = 1.7014118346015974672186595864716 * 10^38 

To jest największa 48-bitowa wartość zmiennoprzecinkowa, ponieważ użyliśmy największej możliwej mantysy i największy możliwy wykładnik.

Zatem maksymalne wartości to:

1.7014116317805962808001687976863 * 10^38, for 32-bit, and, 1.7014118346015974672186595864716 * 10^38, for 48-bit 

Maksymalna wartość dla 48-bitów jest tylko trochę większa niż dla 32-bitowego, co jest logiczne, ponieważ kilka bitów jest dodanych na końcu mantysy.

(Dokładnie mówiąc, maksymalna liczba dla formatu 48-bitowego może być wyrażona jako liczba binarna, która składa się z 39 1 „s, po których następuje 88 0” s.)

(Najmniejsza jest po prostu ujemną wartością tej wartości. Najbliższą zeru bez zera można również łatwo obliczyć w powyższy sposób: użyj najmniejsza możliwa (dodatnia) mantysa: 0000001 i najmniejszy możliwy wykładnik: 80 szesnastkowo lub -128 dziesiętnie)


Do Twojej wiadomości

Niektóre formaty zmiennoprzecinkowe używają niereprezentowanego, ukrytego 1 bit w mantysie (pozwala to na jeden dodatkowy bit precyzji w mantysie, jak f ollows: pierwsza cyfra binarna wszystkich liczb (z wyjątkiem 0 lub denormali, patrz poniżej) to 1, dlatego nie musimy przechowywać tego 1 i mamy dodatkową odrobinę precyzji). Wydaje się, że ten konkretny format tego nie robi.

Inne formaty zmiennoprzecinkowe pozwalają na zdenormalizowaną mantysę, która umożliwia reprezentowanie (dodatnich) liczb mniejszych niż najmniejszy wykładnik, poprzez wymianę bitów dokładności na dodatkowe (ujemne) potęgi z 2. To łatwe w obsłudze, jeśli nie obsługuje również ukrytego elementu, a nieco trudniejsze, jeśli tak.


8 388 607/2 ^ 23 to wartość, którą uzyskasz dzięki mantysie = 0x7FFFFF i wykładnik = 0x00. Nie jest to wartość jednobitowa, ale raczej wartość z pełną mantysą i neutralną, a dokładniej zero wykładnik.

Powód, dla którego ta wartość nie jest bezpośrednio 8388607 i wymaga dzielenia (przez 2 ^ 23 i stąd jest mniejsza niż można by się spodziewać) jest taki, że domniemany punkt radix znajduje się z przodu mantysy, a nie za nią. Pomyśl więc, że (bit znaku, po którym następuje punkt podstawy, po którym następuje dwadzieścia trzy 1-bity) dla mantysy i +/- 111111111111 (tutaj brak punktu podstawy, tylko liczba całkowita, w tym przypadku 127 ) dla wykładnika.

mantysa = 0x7FFFFF z wykładnikiem = 0x7F to największa wartość, która odpowiada 8388607 * 2 ^ 104, gdzie 104 pochodzi z 127-23: znowu, odejmując 23 potęgi dwójki, ponieważ mantysa ma punkt podstawy na początku. Gdyby punkt podstawy znajdował się na końcu, to największa wartość (0x7FFFFF, 0x7F) rzeczywiście wynosiłaby 8,388,607 * 2 ^ 127.

Między innymi, są możliwe sposoby, aby rozważyć wartość jednobitową dla mantysa. Jedna to mantysa = 0x400000, a druga to mantysa = 0x000001. bez uwzględnienia punktu podstawy lub wykładnika, pierwsza wynosi 4,194,304, a druga to 1. Przy zerowym wykładniku i biorąc pod uwagę punkt podstawy, pierwsza wynosi 0,5 (dziesiętnie), a druga 0,00000011920928955078125. Z maksymalnym (lub minimalnym) wykładnikiem możemy obliczyć maksymalne i minimalne wartości jednobitowe.

(Zauważ, że ten drugi format, w którym mantysa ma wiodące zera, byłby uważany za zdenormalizowany w niektórych formatach liczb, a jego znormalizowana reprezentacja to 0x400000 z wykładnikiem -23).

Komentarze

  • Mam jedną wątpliwość. Wykonując 8,388,607 / 2 ^ 23 daje to, co może reprezentować pojedynczy kawałek mantysy. Jak więc 8,388,607 / 2 ^ 23 * 2 ^ 127 reprezentuje wartość maksymalną?
  • @hariprasad, dodam do odpowiedzi dopisek, ponieważ jest to zbyt trudne do wyjaśnienia w formacie komentarza.
  • gdzie jest minimalna wartość? to ' jest żądane w tytule!
  • @CharlieParker, w przeciwieństwie do reprezentacji liczb całkowitych, gdzie min i max są przesunięte, formaty zmiennoprzecinkowe używają znaku & reprezentacje wielkości, gdzie jasność składa się z wykładnika i mantysy. Maksymalna liczba w wielkości znaku jest wtedy (1) dodatnia (bit znaku wynosi 0) i (2) największy możliwy wykładnik i (3) największa możliwa mantysa. Minimalna liczba jest identyczna: z wyjątkiem zmiany bitu znaku, więc jest (1) ujemna (bit znaku wynosi 1), ale (2) największy możliwy wykładnik i (3) największa możliwa mantysa. Jak wyjaśniłem powyżej, minimalna liczba to po prostu -max, więc po prostu dodaj znak -.

Odpowiedź

Możesz zapożyczyć z układu zmiennoprzecinkowego IEEE w celu szybkiego porównania: znak, wykładnik, mantysa. jednak w tym pliku PDF widzę, że mantysa i wykładnik są odwrócone.

Oznacza to, że aby porównać, musisz najpierw sprawdzić bit znaku, a jeśli jeden nie jest zwycięzcą, porównujesz wykładniki, a następnie porównujesz mantysa.

Jeśli jedna jest dodatnia, a druga ujemna, to dodatnia jest maksimum.

Jeśli obie są dodatnie, a jeden wykładnik jest większy, to jest to maksimum (jeśli oba są ujemne, to jest min)

Podobnie dla mantysy.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *