Jeg prøver å beregne min / max, eller det laveste til høyeste verdiområdet for et 48-biters flytpunkt MIL-STD-1750A (PDF) (WIKI) .

Eks: Hvordan et dobbelt område er 1.7E +/- 308

Jeg har sett meg rundt etter ligninger, og er usikker på om det jeg har funnet vil fungere.

Den første ligningen jeg fant var første ligning

Den andre var andre ligning

Jeg er ikke helt sikker på hvor jeg skal begynne med disse, hvis de til og med stemmer med det jeg trenger.

Vil noen formidle kunnskapen til meg og hjelpe til med å løse dette?

Kommentarer

  • OK, så det ser ut til at du har et 48-biters FP-nummer implementert på 16-biters maskinvare. Hva mener du egentlig med " finn min / maks-verdien "?
  • noe galt med a<b?a:b og a>b?a:b
  • Også jeg er uklar. Prøver du å sammenligne to tall innenfor en gitt epsilon ? Prøver du å bestemme det mulige området som kan være innenfor feilmarginen for den verdien? Noe annet? Vi trenger mer sammenheng.
  • Beklager, jeg vil redigere til spørsmål for å avklare. Jeg vil beregne området der en 48 bit FP-verdi, formatert i MIL-STD-1750A kan være, fra minimums- og maksimumsverdien.

Svar

For 32-biters flytpunkt vises maksimumsverdien i tabell III:

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

We kan dekomponere mantissa / eksponent til en (nær) desimalverdi som følger:

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

Det er 23 bits av betydning, så vi deler 8388607 med 2 ^ 23 .

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

så langt som eksponenten:

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

og nå multipliserer vi mantissen av 2 ^ 127 (eksponenten)

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

Dette er den største 32-biters flytpunktverdien fordi den største mantissen brukes og den største eksponenten.

Det 48-biters flytpunktet tilfører 16 biter av mindre betydningsfull mantissa, men lar eksponenten ha samme størrelse. Dermed vil maksverdien bli representert i hex som

mansissa=7FFFFFFFFF, exponent=7F. 

igjen, vi kan beregne

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

maks eksponenten er fremdeles 127, men vi må dele med [23 + 16 = 39, så:] 2 ^ 39. 127-39 = 88, så bare multipliser med 2 ^ 88:

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

Dette er den største 48-biters flytpunktverdien fordi vi brukte størst mulig mantissa og størst mulig eksponent.

Så, maksverdiene er:

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

Maksverdien for 48-bit er bare litt større enn for 32-bit, noe som står til grunn siden noen få biter er lagt til på slutten av mantissen.

(For å være nøyaktig kan maksimalt antall for 48-biters format uttrykkes som et binært tall som består av 39 1 «s etterfulgt av 88 0» s.)

(Det minste er bare det negative av denne verdien. Det nærmeste null uten å være null kan også enkelt beregnes som ovenfor: bruk minste mulig (positiv) mantissa: 0000001 og minst mulig eksponent: 80 i heks, eller -128 i desimal)


FYI

Noen flytende punktformater bruker en ikke-representert skjult 1 bit i mantissaen (dette gir en ekstra bit presisjon i mantissaen, som f tillater: det første binære sifferet av alle tallene (unntatt 0, eller denormale, se nedenfor) er et 1, derfor trenger vi ikke å lagre den 1, og vi har en ekstra bit presisjon). Dette bestemte formatet ser ikke ut til å gjøre dette.

Andre flytende punktformater tillater denormalisert mantissa, som tillater å representere (positive) tall mindre enn minste eksponenten, ved å bytte presisjonsbiter for ekstra (negative) krefter av 2. Dette er lett å støtte hvis det ikke også støtter den skjulte biten, litt vanskeligere hvis den gjør det.


8,388,607 / 2 ^ 23 er verdien du vil få med mantissa = 0x7FFFFF og eksponent = 0x00. Det er ikke enkeltbitverdien, men heller verdien med en full mantissa og en nøytral, eller mer spesifikt, en null eksponent.

Årsaken til at denne verdien ikke er direkte 8388607, og krever divisjon (med 2 ^ 23 og dermed er mindre enn hva du kan forvente) er at den underforståtte radix point er foran på mantissaen, i stedet for etter den. Så tenk (en tegnbit, etterfulgt av et radikspunkt, etterfulgt av tjuetre 1-bits) for mantissaen og +/- 111111111111 (ingen radikspunkt her, bare et heltall, i dette tilfellet, 127 ) for eksponenten.

mantissa = 0x7FFFFF med eksponent = 0x7F er den største verdien som tilsvarer 8388607 * 2 ^ 104, hvor 104 kommer fra 127-23: igjen, trekker 23 krefter av to fordi mantissen har radixpunktet i begynnelsen. Hvis radikspunktet var på slutten, ville den største verdien (0x7FFFFF, 0x7F) faktisk være 8388607 * 2 ^ 127.

Blant andre er det mulige måter vi kan vurdere en enkeltbitverdi for mantissa. Den ene er mantissa = 0x400000, og den andre er mantissa = 0x000001. uten å ta i betraktning radikumpunktet eller eksponenten, er førstnevnte 4,194,304, og sistnevnte er 1. Med en nulleksponent og med tanke på radikspunktet, er førstnevnte 0,5 (desimal) og sistnevnte er 0,00000011920928955078125. Med en maksimal (eller minimum) eksponent kan vi beregne maks og min enkeltbitverdier.

(Merk at sistnevnte format der mantissa har ledende nuller vil bli betraktet som denormalisert i noen tallformater, og dets normaliserte representasjon vil være 0x400000 med en eksponent på -23).

Kommentarer

  • Jeg er i tvil. Ved å gjøre 8,388,607 / 2 ^ 23 gir hva en enkeltbit i mantissen kan representere. Så hvordan 8,388,607 / 2 ^ 23 * 2 ^ 127 representerer maksimumsverdien?
  • @hariprasad, jeg vil legge et etterskrift på svaret, da det er for vanskelig å forklare i kommentarformatet.
  • hvor er minimumsverdien? det ' blir bedt om i tittelen!
  • @CharlieParker, i motsetning til heltallrepresentasjoner der min og maks er forskjøvet, bruker flytende punktformater tegn & størrelsesrepresentasjoner, hvor størrelsen er sammensatt av en eksponent og en mantissa. Maks antall i tegnstørrelse er da (1) positiv (tegnbit er 0) og (2) størst mulig eksponent og (3) størst mulig mantissa. Min-tallet er identisk: bortsett fra tegnbit endres, så er det (1) negativt (tegnbit er 1), men likevel (2) størst mulig eksponent, og (3) størst mulig mantissa. Som jeg forklarte ovenfor er mintallet bare -max, så bare kast på et - -tegn.

Svar

Du kan låne fra hvordan IEEE-flytpunktet er lagt ut for rask sammenligning: sign, exponent, mantissa. men i den PDFen ser jeg at mantissa og eksponent er omvendt.

Dette betyr at for å sammenligne deg, må du først sjekke tegnbiten, og hvis en ikke er vinneren, sammenligner du eksponentene og deretter sammenligner du mantissen.

Hvis den ene er positiv og den andre er negativ, er den positive maks.

Hvis begge er positive og den ene eksponenten er større, er den maks (hvis begge er negative så er det min)

Tilsvarende for mantissa.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *