Jeg prøver at beregne min / max eller det laveste til højeste værdiområde for en 48 bit flydende punkt type MIL-STD-1750A (PDF) (WIKI) .
Eks: Hvordan et dobbelt interval er 1.7E +/- 308
Jeg har kigget efter ligninger og er usikker på, om det, jeg har fundet, fungerer.
Den første ligning, jeg fandt, var
Jeg er ikke helt sikker på, hvor jeg skal begynde med disse, hvis de endda er korrekte i det, jeg har brug for.
Vil nogen give mig deres viden og hjælpe med at løse dette?
Kommentarer
Svar
For 32-bit flydende punkt vises den maksimale værdi i tabel III:
0.9999998 x 2^127 represented in hex as: mantissa=7FFFFF, exponent=7F.
We kan nedbryde mantissen / eksponenten til en (tæt) decimalværdi som følger:
7FFFFF <base-16> = 8,388,607 <base-10>.
Der er 23 bits af betydning, så vi deler 8.388.607 med 2 ^ 23 .
8,388,607 / 2^23 = 0.99999988079071044921875 (see Table III)
så vidt som eksponenten:
7F <base-16> = 127 <base-10>
og nu multiplicerer vi mantissen af 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-bit flydende punktværdi, fordi den største mantissa bruges og den største eksponent.
Det 48-bit flydende punkt tilføjer 16 bit mindre mantissa men efterlader eksponenten den samme størrelse. Således vil den maksimale værdi blive repræsenteret i hex som
mansissa=7FFFFFFFFF, exponent=7F.
igen, vi kan beregne
7FFFFFFFFF <base-16> = 549,755,813,887 <base-10>
den maksimale eksponent er stadig 127, men vi skal dele med [23 + 16 = 39, så:] 2 ^ 39. 127-39 = 88, så multiplicer bare med 2 ^ 88:
549,755,813,887 * 2^88 = 1.7014118346015974672186595864716 * 10^38
Dette er den største 48-bit flydende punktværdi, fordi vi brugte den størst mulige mantissa og størst mulig eksponent.
Så de maksimale værdier er:
1.7014116317805962808001687976863 * 10^38, for 32-bit, and, 1.7014118346015974672186595864716 * 10^38, for 48-bit
Den maksimale værdi for 48-bit er bare lidt større end for 32-bit, hvilket står til grund, da nogle få bit tilføjes til slutningen af mantissen.
(For at være nøjagtig kan det maksimale antal for 48-bit-formatet udtrykkes som et binært tal, der består af 39 1 “s efterfulgt af 88 0” s.)
(Det mindste er bare det negative af denne værdi. Det nærmeste nul uden at være nul kan også let beregnes som ovenfor: brug mindste mulige (positive) mantissa: 0000001 og den mindst mulige eksponent: 80 i hex eller -128 i decimal)
FYI
Nogle flydende punktformater bruger en ikke-repræsenteret skjult 1
bit i mantissa (dette giver mulighed for en ekstra bit præcision i mantissa, som f ollows: det første binære ciffer af alle tal (undtagen 0 eller denormale, se nedenfor) er et 1
, derfor behøver vi ikke at gemme det 1
, og vi har en ekstra smule præcision). Dette bestemte format ser ikke ud til at gøre dette.
Andre flydende punktformater tillader denormaliseret mantissa, som gør det muligt at repræsentere (positive) tal, der er mindre end den mindste eksponenten, ved at handle bits af præcision for yderligere (negative) kræfter af 2. Dette er let at understøtte, hvis det ikke også understøtter den skjulte en bit, lidt sværere, hvis det gør det.
8.388.607 / 2 ^ 23 er den værdi, du ville få med mantissa = 0x7FFFFF og eksponent = 0x00. Det er ikke den enkelte bitværdi, men snarere værdien med en fuld mantissa og en neutral eller mere specifikt en nul eksponent.
Årsagen til, at denne værdi ikke er direkte 8388607 og kræver deling (med 2 ^ 23 og derfor er mindre end hvad du kunne forvente) er, at den underforståede radix point er foran for mantissen, snarere end efter den. Så tænk (en tegnbit efterfulgt af et radix-punkt, efterfulgt af treogtyve 1-bits) til mantissen og +/- 111111111111 (intet radix-punkt her, bare et heltal, i dette tilfælde 127 ) til eksponenten.
mantissa = 0x7FFFFF med eksponent = 0x7F er den største værdi, der svarer til 8388607 * 2 ^ 104, hvor 104 kommer fra 127-23: igen trækker 23 kræfter på to, fordi mantissen har radixpunktet i begyndelsen. Hvis radixpunktet var i slutningen, ville den største værdi (0x7FFFFF, 0x7F) faktisk være 8.388.607 * 2 ^ 127.
Blandt andet er der mulige måder, vi kan overveje en enkelt bitværdi for mantissa. Den ene er mantissa = 0x400000, og den anden er mantissa = 0x000001. uden at overveje radix-punktet eller eksponenten er førstnævnte 4.194.304, og sidstnævnte er 1. Med en nul-eksponent og i betragtning af radix-punktet er førstnævnte 0,5 (decimal) og sidstnævnte er 0,00000011920928955078125. Med en maksimal (eller minimum) eksponent kan vi beregne maks og min enkelt bitværdier.
(Bemærk, at sidstnævnte format, hvor mantissaen har førende nuller, ville blive betragtet som denormaliseret i nogle talformater, og dets normaliserede repræsentation ville være 0x400000 med en eksponent på -23).
Kommentarer
- Jeg er i tvivl. Ved at gøre 8.388.607 / 2 ^ 23 giver det, hvad en enkelt bit i mantissen kan repræsentere. Så hvordan 8.388.607 / 2 ^ 23 * 2 ^ 127 repræsenterer den maksimale værdi?
- @hariprasad, jeg lægger et efterskrift på svaret, da det er for svært at forklare i kommentarformatet.
- hvor er minimumsværdien? det ' er anmodet om i titlen!
- @CharlieParker, i modsætning til heltalrepræsentationer, hvor min og max er forskudt, bruger flydende punktformater tegn & størrelsesrepræsentationer, hvor størrelsen er sammensat af en eksponent og en mantissa. Det maksimale antal i tegnstørrelse er derefter (1) positivt (tegnbit er 0) og (2) den størst mulige eksponent og (3) størst mulige mantissa. Min. Antal er identisk: bortset fra tegnbit ændres, så det er (1) negativt (tegnbit er 1), alligevel (2) den størst mulige eksponent og (3) den størst mulige mantissa. Som jeg forklarede ovenfor, er det mindste tal bare -max, så kast bare et
-
tegn.
Svar
Du kan låne fra, hvordan IEEE-flydepunktet er lagt til hurtig sammenligning: tegn, eksponent, mantissa. dog i den PDF ser jeg mantissa og eksponent er omvendt.
Dette betyder at for at sammenligne dig bliver du først nødt til at kontrollere tegnbiten, og hvis en ikke er vinderen, sammenligner du eksponenterne og derefter sammenligner du mantissen.
Hvis den ene er positiv, og den anden er negativ, er den positive den maksimale.
Hvis begge er positive, og den ene eksponent er større, er den den maksimale (hvis begge er er negative, så er det min.)
Tilsvarende for mantissa.
a<b?a:b
oga>b?a:b