Binär heltalsdecimal

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 a 11 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