Megpróbálom kiszámítani a MIL-STD-1750A típusú 48 bites lebegőpontos típus min / max értékét, vagy a legalacsonyabbtól a legnagyobbig terjedő értéktartományt (PDF) (WIKI) .

Például: hogyan lehet kettős tartomány az 1.7E +/- 308

Körülnéztem az egyenleteket, és nem vagyok biztos benne, hogy működni fog-e az, amit találtam.

Az első megtalált egyenlet a következő volt: első egyenlet

A második második egyenlet

Nem vagyok egészen biztos abban, hogy hol kezdjem ezekkel, ha még helyesek is abban, amire szükségem van.

Valaki átadja nekem a tudását, és segít ennek megoldásában?

Megjegyzések

  • OK, úgy tűnik, hogy van egy 48 bites FP száma 16 bites hardveren valósult meg. Mit értesz pontosan " alatt, hogy megtalálja a min / max értéket "?
  • bármi baj van a<b?a:b és a>b?a:b
  • Én sem vagyok egyértelmű. Két számot próbál összehasonlítani egy adott epsilon belül? Megpróbálja meghatározni a lehetséges tartományt, amely az adott hibahatáron belül lehet? Valami más? További kontextusra van szükségünk.
  • Sajnálom, a kérdés tisztázása érdekében szerkesztem. Szeretném kiszámolni azt a tartományt, amelyben a 48 bites, MIL-STD-1750A formátumban formázott FP érték lehet, a minimum és a maximális értékből.

Válasz

32 bites lebegőpont esetén a maximális érték a III. táblázatban látható:

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

Mi bontani tudja a mantissa / kitevő (szoros) tizedesértékre az alábbiak szerint:

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

23 bit van jelentőséggel, ezért a 8 388 607-et elosztjuk 2 ^ 23-mal .

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

egészen a kitevőig:

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

és most megszorozzuk a mantissát 2 ^ 127 által (a kitevő)

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

Ez a legnagyobb 32 bites lebegőpontos érték, mert a legnagyobb mantissza és a legnagyobb kitevő szerepel.

A 48 bites lebegőpont 16 bitet ad bérlői jelentőségű mantissával, de a kitevőt azonos méretűvé teszi. Így a maximális érték hexán ábrázolva

mansissa=7FFFFFFFFF, exponent=7F. 

lesz, és kiszámíthatjuk

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

a maximális kitevő még mindig 127, de el kell osztanunk a [23 + 16 = 39, tehát:] 2 ^ 39 értékkel. 127-39 = 88, tehát szorozzuk meg 2 ^ 88-val:

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

Ez a legnagyobb 48 bites lebegőpontos érték, mert a lehető legnagyobb mantissát használtuk és a lehető legnagyobb kitevő.

Tehát a maximális értékek a következők:

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

A 48 bites maximális értéke valamivel nagyobb, mint a 32 bites fájlhoz, ami ésszerű, mivel néhány bitet adunk a mantissza végéhez.

(Pontosabban: a 48 bites formátum maximális száma bináris számként kifejezhető, amely 39 1 “-ből áll, majd 88 0” -ból áll.)

(A legkisebb csak ennek az értéknek a negatívuma. A nullához legközelebb eső anélkül, hogy nulla lenne, szintén könnyen kiszámítható a fentiek szerint: használja a a lehető legkisebb (pozitív) mantissa: 0000001 és a lehető legkisebb kitevő: 80 hexában vagy -128 tizedesben)


FYI

Egyes lebegőpontos formátumok nem ábrázolt rejtettet használnak 1 bit a mantisszában (ez egy extra pontosságot tesz lehetővé a mantisszában, mivel f ollows: Az összes szám első bináris számjegye (kivéve a 0-t vagy a denormálisokat, lásd alább) egy 1, ezért nem kell ezt tárolnunk: 1 és van egy kis pontosságunk). Úgy tűnik, hogy ez a bizonyos formátum nem ezt teszi.

Más lebegőpontos formátumok lehetővé teszik a denormalizált mantissát, amely lehetővé teszi az exponensnél kisebb (pozitív) számok képviseletét precíziós bitek kereskedésével további (negatív) teljesítmények érdekében / 2. Ez könnyen támogatható, ha nem támogatja a rejtett egy bitet is, kissé nehezebb, ha igen.


8,388,607 / 2 ^ 23 az az érték, amelyet kapsz a mantissával = 0x7FFFFF és exponens = 0x00. Ez nem az egy bit érték, hanem az érték egy teljes mantissával és egy semleges, pontosabban egy nulla kitevő.

Az ok, amiért ez az érték nem közvetlenül 8388607, és osztást igényel (2 ^ 23-mal, és ezért kisebb mint amire számíthat) az, hogy a hallgatólagos radix pont a mantissa eleje ben található, nem pedig után . Tehát gondolj arra, hogy (előjelbit, amelyet egy radix pont követ, majd huszonhárom 1 bit) a mantisszához és a +/- 111111111111 (itt nincs radix pont, csak egész szám, ebben az esetben 127 ) a kitevőre.

mantissa = 0x7FFFFF exponenssel = 0x7F a legnagyobb érték, amely megfelel a 8388607 * 2 ^ 104 értéknek, ahol a 104 a 127-23-ból származik: ismét kettő 23 hatványát vonjuk le, mert a mantissának megvan a radix pontja az elején. Ha a radix pont a végén lenne, akkor a legnagyobb érték (0x7FFFFF, 0x7F) valóban 8 388 607 * 2 ^ 127. lenne.

Többek között lehetséges, hogy figyelembe vehetünk egy bit értéket a mantissa. Az egyik a mantissza = 0x400000, a másik pedig a mantissza = 0x000001. a radix pont vagy a kitevő figyelembe vétele nélkül az előbbi 4 194 304, az utóbbi pedig 1. Nulla kitevővel és a radix pont figyelembe vételével az előbbi 0,5 (tizedes), utóbbi pedig 0,00000011920928955078125. Maximális (vagy minimum) kitevővel kiszámíthatjuk a max és a min egy bit értékeket.

(Ne feledje, hogy az utóbbi formátum, ahol a mantiszának nullái vannak, bizonyos számformátumokban denormalizáltnak tekinthető, és normalizált ábrázolása 0x400000 lenne, -23 kitevővel).

Megjegyzések

  • Kételyem van. A 8 388 607/2 ^ 23 megadásával megadja azt, amit a mantissa egyetlen bitje képviselhet. Tehát a 8 388 607/2 ^ 23 * 2 ^ 127 hogyan képviseli a maximális értéket?
  • @hariprasad, postScriptet teszek a válaszra, mivel a komment formátumban túl nehéz megmagyarázni.
  • hol van a minimális érték? ez ' kért a címben!
  • @CharlieParker, ellentétben az egész ábrázolásokkal, ahol a min és a max eltolásra kerül, a lebegőpontos formátumok nagyságrendi ábrázolások, ahol a nagyság egy kitevőből és egy mantiszából áll. A jel nagyságának maximális száma ekkor (1) pozitív (előjel bit 0), és (2) a lehető legnagyobb kitevő és (3) a lehető legnagyobb mantissza. A min szám megegyezik: kivéve, ha az előjel bit megváltozik, tehát (1) negatív (előjel bit 1), mégis (2) a lehető legnagyobb kitevő, és (3) a lehető legnagyobb mantissza. Ahogy fentebb kifejtettem, a min szám csak -max, ezért csak dobjon egy - jelet.

Válasz

Kölcsönözhet az IEEE lebegőpont elrendezésének módjáról a gyors összehasonlítás érdekében: előjel, kitevő, mantissa. azonban abban a PDF-ben látom, hogy a mantissa és az exponens megfordul.

Ez azt jelenti, hogy az összehasonlításhoz először meg kell vizsgálnunk a jel bitet, és ha még nem az egyik a nyerő, akkor összehasonlítod a kitevőket, majd összehasonlítod a mantissa.

Ha az egyik pozitív, a másik negatív, akkor a pozitív a max.

Ha mindkettő pozitív, és az egyik kitevő nagyobb, akkor ez a max (ha mindkettő negatívak, akkor ez a min)

Hasonlóan a mantisszához.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük