Binär heltalsdecimal
Flyttalsformat 754 |
---|
IEEE |
|
Övrig |
IEEE 754-2008 -standarden inkluderar decimaltalsformat med flyttal där signifikansen och exponenten (och nyttolasten av NaNs ) kan kodas på två sätt, hänvisade till som binär kodning och decimalkodning .
Båda formaten delar upp ett tal i en teckenbit s , en exponent q (mellan q min och q max ), och en p -siffrig signifikand c (mellan 0 och 10 p −1). Det kodade värdet är (−1) s ×10 q × c . I båda formaten är intervallet för möjliga värden identiskt, men de skiljer sig åt i hur signifikansen c representeras. I decimalkodningen kodas den som en serie p decimalsiffror (med den tätt packade decimalkodningen (DPD). Detta gör konverteringen till decimalform effektiv, men kräver en specialiserad decimal ALU för att bearbeta. I den binära heltalsdecimalen ( BID ) kodas den som ett binärt tal.
Formatera
Genom att använda det faktum att 2 10 = 1024 bara är något mer än 10 3 = 1000, kan 3 n -siffriga decimaltal effektivt packas i 10 n binära bitar. Emellertid har IEEE-formaten signifikander på 3 n +1 siffror, vilket i allmänhet skulle kräva 10 n +4 binära bitar för att representera.
Detta skulle inte vara effektivt, eftersom endast 10 av de 16 möjliga värdena av de ytterligare 4 bitarna behövs. En effektivare kodning kan utformas med det faktum att exponentomfånget är av formen 3×2 k , så exponenten börjar aldrig med 11
. Med Decimal32-kodningen (med en signifikans på 3*2+1 decimalsiffror) som ett exempel ( e
står för exponent, m
för mantissa, dvs significand):
- Om betydelsen börjar med
0mmm
, utelämnar den ledande 0 biten låter betydelsen passa in i 23 bitar:
S 00eeeeee (0) mmm mmmmmmmmm mmmmmmmm s 01eeeeee (0) mmm mmmmmmmm mmmmmmmm s 10eeee (0) mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
- if the betydande med
100
, utelämnar de ledande 100 bitarna låter sigsignifikanden passa in i 21 bitar. The exponent is shifted over 2 bits, and a11
bit pair shows that this form is being used:
s 1100eeeeee (100)m mmmmmmmmmm mmmmmmmmmm s 1101eeeeee (100)m mmmmmmmmmm mmmmmmmmmm s 1110eeeeee (100)m mmmmmmmmmm mmmmmmmmmm
- Infinity, quiet NaN and signalering av NaN använder kodningar som börjar med
s 1111
:
s 11110 xxxxxxxxxxxxxxxxxxxxxxxxxx s 111110 xxxxxxxxxxxxxxxxxxxxxxxxx s 111111 xxxxxxxxxxxxxxxxxxxxxxxxx
Bitarna som visas inom parentes är implicita : de ingår inte i de 32 bitarna i Decimal32-kodningen, utan antyds av de två bitarna efter teckenbiten.
Decimal64- och Decimal128-kodningarna har större exponent- och signifikansfält, men fungerar på liknande sätt.
För Decimal128-kodningen räcker faktiskt 113 bitar av significand för att koda 34 decimalsiffror, och den andra formen krävs faktiskt aldrig.
Kohort
Ett decimaltal med flyttal kan kodas på flera sätt, de olika sätten representerar olika precisioner, till exempel är 100.0 kodad som 1000×10 −1 medan 100.00 är kodad som 10000×10 −2 . Uppsättningen av möjliga kodningar med samma numeriska värde kallas en kohort i standarden. Om resultatet av en beräkning är inexakt bevaras den största mängden signifikant data genom att välja kohortmedlemmen med det största heltal som kan lagras i signifikanden tillsammans med den nödvändiga exponenten.
Räckvidd
Den föreslagna IEEE 754r-standarden begränsar talintervallet till en signifikans av formen 10 n −1, där n är antalet hela decimalsiffror som kan lagras i de tillgängliga bitarna så att decimalavrundning sker korrekt.
32 bitar | 64 bitar | 128 bitar | |
---|---|---|---|
Förvaringsbitar | 32 | 64 | 128 |
Efterföljande Significand bitar | 20 | 50 | 110 |
Betydande bitar | 23/24 | 53/54 | 113 |
Signifikanta siffror | 7 | 16 | 34 |
Kombinationsbitar | 11 | 13 | 17 |
Exponentbitar | 8 | 10 | 14 |
Partiskhet | 101 | 398 | 6176 |
Standard emax | 96 | 384 | 6144 |
Standard emin | −95 | −383 | −6143 |
Prestanda
En binär kodning är i sig mindre effektiv för omvandlingar till eller från decimalkodade data, såsom strängar ( ASCII , Unicode , etc.) och BCD . En binär kodning är därför bäst att välja endast när data är binär snarare än decimal. IBM har publicerat en del overifierade prestandadata.
Se även
Vidare läsning
- Savard, John JG (2018) [2007]. "The Decimal Floating-Point Standard" . quadiblock . Arkiverad från originalet 2018-07-03 . Hämtad 2018-07-16 .