Pokouším se vypočítat min / max nebo rozsah nejnižší až nejvyšší hodnoty 48bitového typu s plovoucí desetinnou čárkou MIL-STD-1750A (PDF) (WIKI) .

Příklad: Jak funguje dvojitý rozsah je 1.7E +/- 308

Rozhlédl jsem se po rovnicích a nejsem si jistý, jestli to, co jsem našel, bude fungovat.

První rovnice, kterou jsem našel, byla první rovnice

Druhá byla druhá rovnice

Nejsem si úplně jistý, kde s nimi začít, pokud jsou dokonce správné v tom, co potřebuji.

Poskytne mi někdo své znalosti a pomůže to vyřešit?

Komentáře

  • Dobře, takže to vypadá, že máte 48bitové číslo FP implementováno na 16bitovém hardwaru. Co přesně máte na mysli tím, že " najdete min / max hodnotu "?
  • nic špatného a<b?a:b a a>b?a:b
  • příliš nejasný. Pokoušíte se porovnat dvě čísla v daném epsilon ? Pokoušíte se určit možný rozsah, který by mohl být v mezích chyby této hodnoty? Něco jiného? Potřebujeme více kontextu.
  • Omlouvám se, upravím dotaz a vysvětlím to. Chtěl bych vypočítat rozsah, ve kterém může být 48bitová hodnota FP formátovaná v MIL-STD-1750A, z minimální a maximální hodnoty.

Odpověď

Pro 32bitovou plovoucí desetinnou čárku je maximální hodnota uvedena v tabulce III:

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

We může rozložit mantisu / exponent na (zavřít) desítkovou hodnotu následujícím způsobem:

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

Existuje 23 důležitých bitů, takže 8 388 607 vydělíme 2 ^ 23 .

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

až k exponentu:

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

a nyní vynásobíme mantisu o 2 ^ 127 (exponent)

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

Toto je největší 32bitová hodnota s plovoucí desetinnou čárkou, protože je použita největší mantisa a největší exponent.

48bitová plovoucí desetinná čárka přidává 16 bitů mantisy významnosti menšího, ale ponechává exponentu stejnou velikost. Maximální hodnota by tedy byla reprezentována v hexadecimu jako

mansissa=7FFFFFFFFF, exponent=7F. 

opět můžeme vypočítat

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

maximální exponent je stále 127, ale musíme jej vydělit [23 + 16 = 39, takže:] 2 ^ 39. 127-39 = 88, takže jen vynásobte 2 ^ 88:

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

Toto je největší 48bitová hodnota s plovoucí desetinnou čárkou, protože jsme použili největší možnou mantisu a největší možný exponent.

Takže maximální hodnoty jsou:

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

Maximální hodnota pro 48bit je jen o něco větší než pro 32-bit, což má své opodstatnění, protože na konec mantisy je přidáno několik bitů.

(Přesně, maximální počet pro 48bitový formát lze vyjádřit jako binární číslo, které skládá se z 39 1 s následovaných 88 0 s.)

(Nejmenší je pouze zápor této hodnoty. Nejbližší k nule, aniž by byla nula, lze také snadno vypočítat podle výše uvedeného: použijte nejmenší možná (kladná) mantisa: 0000001 a nejmenší možný exponent: 80 v hexadecimálním formátu nebo -128 v desítkové soustavě)


FYI

Některé formáty s plovoucí desetinnou čárkou používají nezastoupený skrytý 1 bit v mantisě (to umožňuje další bit přesnosti v mantisě, protože f ollows: první binární číslice všech čísel (kromě 0 nebo denormálů, viz níže) je 1, proto ji nemusíme ukládat 1 a máme trochu přesnosti). Zdá se, že tento konkrétní formát to nedělá.

Jiné formáty s plovoucí desetinnou čárkou umožňují denormalizovanou mantisu, která umožňuje reprezentovat (kladná) čísla menší než nejmenší exponent, obchodováním s precizností pro další (záporné) síly ze 2. Tato snadná podpora, pokud nepodporuje ani skrytý bit, o něco těžší, pokud ano.


8 388 607/2 ^ 23 je hodnota, kterou získáte pomocí mantisy = 0x7FFFFF a exponent = 0x00. Nejedná se o jedinou bitovou hodnotu, ale spíše o hodnotu s plnou mantisou a neutrální, nebo konkrétněji nula exponent.

Důvod, proč tato hodnota není přímo 8388607, a vyžaduje dělení (o 2 ^ 23, a proto je menší než byste čekali) je, že implikovaný radix point je v přední části mantisy, spíše než po ní. Takže zvažte (znaménkový bit, za kterým následuje radixový bod, následovaný třiadvaceti 1 bity) pro mantisu a +/- 11111111111111 (zde žádný radixový bod, pouze celé číslo, v tomto případě ) pro exponenta.

mantissa = 0x7FFFFF s exponentem = 0x7F je největší hodnota, která odpovídá 8388607 * 2 ^ 104, kde 104 pochází z 127-23: opět odečtením 23 mocnin dvou, protože mantisa má bod radixu na začátku. Pokud by byl radixový bod na konci, pak by největší hodnota (0x7FFFFF, 0x7F) byla skutečně 8 388 607 * 2 ^ 127.

Mimo jiné existují možné způsoby, jak můžeme uvažovat o jediné bitové hodnotě pro mantisa. Jeden je mantisa = 0x400000 a druhý je mantisa = 0x000001. bez uvažování bodu radixu nebo exponentu, první je 4,194,304 a druhý je 1. S nulovým exponentem a vzhledem k bodu radixu je první 0,5 (desítkově) a druhý 0,00000011920928955078125. S maximálním (nebo minimálním) exponentem můžeme vypočítat maximální a minimální jednobitové hodnoty.

(Všimněte si, že druhý formát, kde má mantisa úvodní nuly, by byl v některých formátech čísel považován za denormalizovaný a jeho normalizovaná reprezentace by byla 0x400000 s exponentem -23).

Komentáře

  • Mám jednu pochybnost. Provedením 8,388,607 / 2 ^ 23 dává to, co může představovat jediný bit v mantisě. Jak tedy 8 388 607/2 ^ 23 * 2 ^ 127 představuje maximální hodnotu?
  • @hariprasad, na odpověď vložím postscript, protože je příliš těžké to vysvětlit ve formátu komentářů.
  • kde je minimální hodnota? to ' s požadováno v názvu!
  • @CharlieParker, na rozdíl od celočíselných reprezentací, kde jsou min a max posunuty, formáty s plovoucí desetinnou čárkou používají znak & reprezentace velikosti, kde velikost se skládá z exponentu a mantisy. Maximální počet ve velikosti znaménka je pak (1) kladný (znaménkový bit je 0) a (2) největší možný exponent a (3) největší možná mantisa. Minimální číslo je identické: kromě změny bitu znaménka je tedy (1) záporné (bit bitu je 1), přesto (2) největší možný exponent a (3) největší možná mantisa. Jak jsem vysvětlil výše, minimální číslo je pouze -max, takže stačí použít znak -.

Odpověď

Můžete si půjčit z toho, jak je IEEE plovoucí čárka vytyčena pro rychlé srovnání: znaménko, exponent, mantisa. nicméně v tom PDF vidím, že mantisa a exponent jsou obráceny.

To znamená, že pro srovnání budete muset nejprve zkontrolovat bit znaménka a pokud jeden není vítězem, porovnáte exponenty a pak porovnáte mantisa.

Pokud je jeden kladný a druhý záporný, pak kladný je max.

Pokud jsou oba kladné a jeden exponent je větší, pak je to maximum (pokud oba jsou záporné, pak je to min)

Podobně pro mantisu.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *