Încerc să calculez min / max, sau intervalul de valoare de la cea mai mică la cea mai mare a unui tip cu virgulă mobilă de 48 de biți de tip MIL-STD-1750A id = „ab2693b5c3″>

(PDF) (WIKI) .

Ex: Cum se face un interval dublu este 1.7E +/- 308

Am căutat ecuații în jur și nu știu dacă ceea ce am găsit va funcționa.

Prima ecuație pe care am găsit-o a fost prima ecuație

A doua a fost a doua ecuație

Nu sunt sigur de unde să încep cu acestea, dacă sunt chiar corecte în ceea ce am nevoie.

Îmi va împărtăși cineva cunoștințele mele și va ajuta la rezolvarea acestui lucru?

Comentarii

  • OK, deci se pare că ai un număr FP de 48 de biți implementat pe hardware pe 16 biți. Ce vrei să spui exact prin " să găsești valoarea min / max "?
  • ceva în neregulă cu a<b?a:b și a>b?a:b
  • Nici eu nu sunt clar. Încercați să comparați două numere într-un anumit epsilon ? Încercați să determinați intervalul posibil care ar putea fi în marja de eroare a acelei valori? Altceva? Avem nevoie de mai mult context.
  • Ne pare rău, voi edita la întrebare pentru a clarifica. Aș dori să calculez intervalul în care poate fi o valoare FP de 48 de biți, formatată în MIL-STD-1750A, din valoarea minimă și cea maximă.

Răspuns

Pentru virgulă mobilă pe 32 de biți, valoarea maximă este prezentată în Tabelul III:

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

Noi poate descompune mantisa / exponentul într-o valoare zecimală (apropiată) după cum urmează:

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

Există 23 de biți de semnificație, deci împărțim 8.388.607 la 2 ^ 23 .

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

până la exponent:

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

și acum înmulțim mantisa de 2 ^ 127 (exponentul)

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

Aceasta este cea mai mare valoare în virgulă mobilă de 32 de biți, deoarece se folosește cea mai mare mantisă și cel mai mare exponent.

Punctul mobil de 48 de biți adaugă 16 biți de mantisă cu semnificație mai mică, dar lasă exponentului aceeași dimensiune. Astfel, valoarea maximă ar fi reprezentată în hexagonal ca

mansissa=7FFFFFFFFF, exponent=7F. 

din nou, putem calcula

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

exponentul maxim este încă 127, dar trebuie să împărțim la [23 + 16 = 39, deci:] 2 ^ 39. 127-39 = 88, deci doar înmulțiți cu 2 ^ 88:

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

Aceasta este cea mai mare valoare în virgulă mobilă de 48 de biți, deoarece am folosit cea mai mare mantisă posibilă și cel mai mare exponent posibil.

Deci, valorile maxime sunt:

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

Valoarea maximă pentru 48 de biți este puțin mai mare decât pentru 32 de biți, ceea ce este rezonabil, deoarece câțiva biți sunt adăugați la sfârșitul mantizei.

(Pentru a fi exact, numărul maxim pentru formatul de 48 de biți poate fi exprimat ca un număr binar care constă din 39 1 „s, urmată de 88 0” s.)

(Cel mai mic este doar negativul acestei valori. Cel mai apropiat de zero fără a fi zero poate fi calculat cu ușurință conform celor de mai sus: utilizați cea mai mică (pozitivă) mantisă posibilă: 0000001 și cel mai mic exponent posibil: 80 în hex, sau -128 în zecimal)


FYI

Unele formate în virgulă mobilă folosesc un ascuns nereprezentat 1 bit în mantisă (aceasta permite un bit suplimentar de precizie în mantisă, ca f ollows: prima cifră binară a tuturor numerelor (cu excepția 0 sau denormale, vezi mai jos) este un 1, de aceea nu trebuie să stocăm 1 și avem un pic de precizie în plus). Acest format particular nu pare să facă acest lucru.

Alte formate în virgulă mobilă permit mantisa denormalizată, care permite reprezentarea numerelor (pozitive) mai mici decât cel mai mic exponent, prin tranzacționarea unor biți de precizie pentru puteri (negative) suplimentare din 2. Acest lucru este ușor de suportat dacă nu suportă și cel ascuns, un pic mai greu dacă este așa.


8,388,607 / 2 ^ 23 este valoarea pe care ai obține-o cu mantisa = 0x7FFFFF și exponent = 0x00. Nu este valoarea unui singur bit, ci mai degrabă valoarea cu o mantisă completă și o neutră, sau mai precis, o zero exponent.

Motivul pentru care această valoare nu este direct 8388607 și necesită împărțire (cu 2 ^ 23 și, prin urmare, este mai mică decât ceea ce v-ați putea aștepta) este că punctul radix implicit se află în fața mantissei, mai degrabă decât după ea. Deci, gândiți-vă la (un bit de semn, urmat de un punct radix, urmat de douăzeci și trei de 1 bit) pentru mantisă și +/- 111111111111 (aici nu există un punct radix, doar un număr întreg, în acest caz, 127 ) pentru exponent.

mantissa = 0x7FFFFF cu exponent = 0x7F este cea mai mare valoare care corespunde cu 8388607 * 2 ^ 104, unde 104 provine de la 127-23: din nou, scăzând 23 de puteri a două, deoarece mantisa are punctul radix la inceput. Dacă punctul radix ar fi la sfârșit, atunci cea mai mare valoare (0x7FFFFF, 0x7F) ar fi într-adevăr 8.388.607 * 2 ^ 127.

Printre altele, există posibile moduri în care putem considera o singură valoare de bit pentru mantissa. Una este mantisă = 0x400000, iar cealaltă este mantisă = 0x000001. fără a lua în considerare punctul radix sau exponentul, primul este 4.194.304, iar cel din urmă este 1. Cu un exponent zero și având în vedere punctul radix, primul este 0.5 (zecimal), iar cel din urmă este 0.00000011920928955078125. Cu un exponent maxim (sau minim), putem calcula valorile maxime și minime ale unui singur bit.

(Rețineți că ultimul format în care mantisa are zerouri de frunte ar fi considerat denormalizat în unele formate de numere, iar reprezentarea sa normalizată ar fi 0x400000 cu un exponent de -23).

Comentarii

  • Am o singură îndoială. Făcând 8.388.607 / 2 ^ 23 dă ceea ce poate reprezenta un singur bit din mantisă. Deci, cum reprezintă 8.388.607 / 2 ^ 23 * 2 ^ 127 valoarea maximă?
  • @hariprasad, voi pune un postscript pe răspuns, deoarece este prea greu de explicat în formatul de comentariu.
  • unde este valoarea minimă? ' este solicitat în titlu!
  • @CharlieParker, spre deosebire de reprezentările întregi în care min și max sunt compensate, formatele în virgulă mobilă utilizează semnul & reprezentări de magnitudine, unde magnitudinea este compusă dintr-un exponent și o mantisă. Numărul maxim în mărimea semnului este apoi (1) pozitiv (bitul de semn este 0) și (2) cel mai mare exponent posibil și (3) cel mai mare mantisă posibil. Numărul minim este identic: cu excepția modificării bitului de semn, deci este (1) negativ (bitul de semn este 1), totuși (2) cel mai mare exponent posibil și (3) cea mai mare mantisă posibilă. După cum am explicat mai sus, numărul minim este doar -max, deci aruncați doar pe un semn -.

Răspuns

Puteți împrumuta din modul în care punctul flotant IEEE este stabilit pentru comparație rapidă: semn, exponent, mantisă. totuși, în acel PDF văd că mantissa și exponentul sunt inversate.

Acest lucru înseamnă că, pentru a compara, va trebui să verificați mai întâi bitul de semn și dacă unul nu este încă câștigător, comparați exponenții și apoi comparați mantisa.

Dacă una este pozitivă iar cealaltă este negativă, atunci pozitivul este maxim.

Dacă ambele sunt pozitive și un exponent este mai mare, atunci este maxima (dacă ambele sunt sunt negative atunci este min)

În mod similar pentru mantissa.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *