decimal128 flyttalsformat
Flyttalsformat 754 |
---|
IEEE |
|
Övrig |
Inom databehandling är decimal128 ett decimalt flyttalsformat datornumreringsformat som upptar 16 byte (128 bitar) i datorns minne . Den är avsedd för applikationer där det är nödvändigt att efterlikna decimalavrundning exakt, såsom finansiella och skattemässiga beräkningar.
±0000000000000000000000000000000000×10 −6176 to 9 9 9 9 −6143 till exponentområde 9 ± Decimal128 999 999 999 999 999 × 10 6144 stöder 34 decimalsiffror med signifikans och ett på +6144, dvs. ±0,000 000 000 000 000 000 000 000 000 000 000 × 40 000 × 9 999 9. 99 . (Tillsvarande, ±9999999999999999999999999999999999× ± 6111.) Therefore, decimal128 has the greatest range of values compared with other IEEE basic floating-point formats. Because the significand is not normalized, most values with less than 34 significant digits have multiple possible representations; 1 × 102=0.1 × 103=0.01 × 104, etc. Zero has 12288 possible representations (24576 if both signed zeros are included).
Decimal128 flyttal är ett relativt nytt decimal flyttal format, formellt introducerat i 2008 års version av IEEE 754 samt med ISO/IEC/IEEE 60559:2011 .
Representation av decimal128-värden
Skylt | Kombination | Betydande fortsättning |
---|---|---|
1 bit | 17 bitar | 110 bitar |
s | mmmmmmmmmmmmmmmmm | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
IEEE 754 tillåter två alternativa representationsmetoder för decimal128-värden. Standarden anger inte hur man betecknar vilken representation som används, till exempel i en situation där decimal128-värden kommuniceras mellan system.
I en representationsmetod, baserad på binär heltalsdecimal (BID), representeras signifikanden som binärt kodat positivt heltal.
Den andra, alternativa, representationsmetoden är baserad på tätt packad decimal (DPD) för det mesta av signifikanden (förutom den mest signifikanta siffran).
Båda alternativen ger exakt samma intervall av representativa tal: 34 siffror av signifikans och 3 × 2 12 = 12 288 möjliga exponentvärden.
I båda fallen kombineras de mest signifikanta 4 bitarna av signifikanden (som faktiskt bara har 10 möjliga värden) med de mest signifikanta 2 bitarna av exponenten (3 möjliga värden) för att använda 30 av de 32 möjliga värdena på 5 bitar i kombinationsfält. De återstående kombinationerna kodar oändligheter och NaNs .
Kombinationsfält | Exponent | Signifikanta Msbits | Övrig |
---|---|---|---|
00mmmmmmmmmmmmmm | 00xxxxxxxxxxxx | 0ccc | — |
01mmmmmmmmmmmmmm | 01xxxxxxxxxxxx | 0ccc | — |
10mmmmmmmmmmmmmm | 10xxxxxxxxxxxx | 0ccc | — |
1100mmmmmmmmmmmm | 00xxxxxxxxxxxx | 100c | — |
1101mmmmmmmmmmmm | 01xxxxxxxxxxxx | 100c | — |
1110mmmmmmmmmmmm | 10xxxxxxxxxxxx | 100c | — |
11110mmmmmmmmmmmm | — | — | ±Oändlighet |
11111mmmmmmmmmmmm | — | — | NaN . Tecken bit ignoreras. Sjätte biten i kombinationsfältet bestämmer om NaN signalerar. |
I fallet med Infinity och NaN ignoreras alla andra bitar av kodningen. Således är det möjligt att initiera en array till oändligheter eller NaNs genom att fylla den med ett enda bytevärde.
Binärt heltals signifikansfält
Det här formatet använder en binär signifikans från 0 till 10 34 − 1 = 9 999 999 999 999 999 999 999 999 999 999 999 0000000011 = 1ED09BEAD87C0378D8E63 FFFFFFFF 111 110106 =011006 1111 1010101101 1000011111 0111100011 0110001110 0110001111 1111111111 1111111111 111 = 01100 . Kodningen kan representera binära signifikander upp till 10 × 2 110 − 1 = 12 980 742 146 337 069 071 326 240 823 050 239 men värden som är större än 10 34 − 1 är olagliga (och om standardimplementering krävs) påträffas vid inmatning).
Såsom beskrivits ovan varierar kodningen beroende på huruvida de mest signifikanta 4 bitarna av signifikanden är i intervallet 0 till 7 (00002 till 01112 ) eller högre (10002 eller 10012 ) .
Om de 2 bitarna efter teckenbiten är "00", "01" eller "10", så består exponentfältet av de 14 bitarna som följer efter teckenbiten, och signifikanden är de återstående 113 bitarna, med en implicit inledande 0 bit:
s 00eeeeeeeeeeee (0)ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt s 01eeeeeeeeeeee (0)ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt s 10eeeeeeeeeeee (0)ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt
Detta inkluderar subnormala tal där den ledande signifikanssiffran är 0.
Om de 2 bitarna efter teckenbiten är "11", så flyttas 14-bitars exponentfältet 2 bitar åt höger (efter både teckenbiten och de "11" bitarna därefter), och den representerade signifikansen är i den återstående 111 bitar. I detta fall finns det en implicit (det vill säga inte lagrad) ledande 3-bitars sekvens "100" i den sanna signifikansen.
s 1100eeeeeeeeeeee (100)t tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt s 1101eeeeeeeeeeee (100)t tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt s 1110eeeeeeeeeeee (100)t tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt
"11" 2-bitarssekvensen efter teckenbiten indikerar att det finns ett implicit "100" 3-bitars prefix till signifikanden. Jämför att ha en implicit 1 i signifikansen för normala värden för de binära formaten. "00", "01" eller "10" bitarna är en del av exponentfältet.
För decimal128-formatet är alla dessa signifikander utanför det giltiga intervallet (de börjar med 2 113 > 1,038 × 10 34 ), och avkodas alltså som noll, men mönstret är detsamma som decimal32 och decimal64 .
I ovanstående fall är det representerade värdet
- (−1) tecken × 10 exponent−6176 × signifikans
Om de fyra bitarna efter teckenbiten är "1111" är värdet en oändlighet eller en NaN, enligt beskrivningen ovan:
s 11110 xx...x ±oändlighet s 11111 0x...xa tyst NaN s 11111 1x...xa signalerande NaN
Tätt packat decimal signifikansfält
I den här versionen lagras signifikanden som en serie decimalsiffror. Den inledande siffran är mellan 0 och 9 (3 eller 4 binära bitar), och resten av signifikanden använder den tätt packade decimalkodningen (DPD).
De två inledande bitarna av exponenten och den inledande siffran (3 eller 4 bitar) av signifikanden kombineras till de fem bitarna som följer teckenbiten.
Dessa tolv bitar efter det är exponentens fortsättningsfält, vilket ger exponentens mindre signifikanta bitar.
De sista 110 bitarna är det signifikanta fortsättningsfältet, bestående av elva 10-bitars dekleter . Varje declet kodar tre decimalsiffror med hjälp av DPD-kodningen.
Om de två första bitarna efter teckenbiten är "00", "01" eller "10", så är dessa exponentens inledande bitar, och de tre bitarna efter det tolkas som den inledande decimalsiffran (0 till 7) ):
s 00 TTT (00)eeeeeeeeeeeee (0TTT)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tt ttttttttt] eTT (0TTT)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt] s 10 TTT (10)eeeeeeeeTTtttt)[tt (0 tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt]
Om de två första bitarna efter teckenbiten är "11", så är de andra två bitarna exponentens ledande bitar, och den sista biten har prefixet "100" för att bilda den inledande decimalsiffran (8 eller 9):
s 1100 T (00)eeeeeeeeeeeeee (100T)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttttt][etttttttt1][etttt1)ee (100T)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt] s 1110 T (10)eeeeeeeeeeeeee[tttttttt] tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt]
De återstående två kombinationerna (11110 och 11111) av 5-bitarsfältet används för att representera ±oändlighet respektive NaNs.
DPD/3BCD-omkodningen för dekleten ges av följande tabell. b9...b0 är bitarna i DPD, och d2...d0 är de tre BCD-siffrorna.
DPD-kodat värde | Decimalsiffror | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Kodutrymme (1024 stater) | b9 | b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | d2 | d1 | d0 | Värden kodade | Beskrivning | Förekomster (1 000 tillstånd) | |
50,0 % (512 delstater) | a | b | c | d | e | f | 0 | g | h | i | 0abc | 0def | 0ghi | (0–7) (0–7) (0–7) | Tre små siffror | 51,2 % (512 delstater) | |
37,5 % (384 delstater) | a | b | c | d | e | f | 1 | 0 | 0 | i | 0abc | 0def | 100 i | (0–7) (0–7) (8–9) |
Två små siffror, en stor |
38,4 % (384 delstater) | |
a | b | c | g | h | f | 1 | 0 | 1 | i | 0abc | 100 f | 0ghi | (0–7) (8–9) (0–7) | ||||
g | h | c | d | e | f | 1 | 1 | 0 | i | 100 c | 0def | 0ghi | (8–9) (0–7) (0–7) | ||||
9,375 % (96 delstater) | g | h | c | 0 | 0 | f | 1 | 1 | 1 | i | 100 c | 100 f | 0ghi | (8–9) (8–9) (0–7) |
En liten siffra, två stora |
9,6 % (96 delstater) | |
d | e | c | 0 | 1 | f | 1 | 1 | 1 | i | 100 c | 0def | 100 i | (8–9) (0–7) (8–9) | ||||
a | b | c | 1 | 0 | f | 1 | 1 | 1 | i | 0abc | 100 f | 100 i | (0–7) (8–9) (8–9) | ||||
3,125 % (32 delstater, 8 använda) | x | x | c | 1 | 1 | f | 1 | 1 | 1 | i | 100 c | 100 f | 100 i | (8–9) (8–9) (8–9) | Tre stora siffror, bitarna b9 och b8 bryr sig inte | 0,8 % (8 delstater) |
De 8 decimalvärdena vars siffror alla är 8:or eller 9:or har fyra koder vardera. Bitarna markerade x i tabellen ovan ignoreras vid inmatning, men kommer alltid att vara 0 i beräknade resultat. ( 8 × 3 = 24 icke-standardkodningar fyller ut gapet mellan 10 3 = 1000 och 2 10 = 1024 .)
I ovanstående fall, med den sanna signifikansen som sekvensen av decimalsiffror avkodad, är det representerade värdet
Se även
- ISO/IEC 10967 , Språkoberoende aritmetik
- Primitiv datatyp
- Q-notation (vetenskaplig notation)