format zmiennoprzecinkowy decimal64 — decimal64 floating-point format
Formaty zmiennoprzecinkowe |
---|
IEEE 754 |
|
Inny |
W komputerowych , decimal64 jest dziesiętny zmiennoprzecinkową w formacie numeracja komputer , który zajmuje 8 bajty (64 bitów) w pamięci komputera. Jest przeznaczony do zastosowań, w których konieczne jest dokładne emulowanie zaokrąglania dziesiętnego, takich jak obliczenia finansowe i podatkowe.
Decimal64 obsługuje 16 cyfr dziesiętnych z mantysy i jest wykładnik zakresu -383 do +384, tj ± 0,000 000 000 000 000 x 10 -383 do ± 9,999 999 999 999 999 x 10 384 . (Równoważnie ± 0 000 000 000 000 000 x 10 -398 do ± 9 999 999 999 999 999 x 10 369 ). W przeciwieństwie do tego, w odpowiednim formacie binarnym, który jest najczęściej stosowanym typem ma przybliżony zakres ± 0,000 000 000 000 001 × 10 -308 do ±1,797 693 134 862 315 × 10 308 . Ponieważ significand nie jest znormalizowany, większość wartości zawierających mniej niż 16 cyfr znaczących ma wiele możliwych reprezentacji; 1 x 10 2 = 0,1 x 10 3 = 0,01 x 10 4 itp zera 768 możliwych przedstawień (1536, jeżeli obie podpisane zera w zestawie).
Decimal64 zmiennoprzecinkowych jest stosunkowo nowy format dziesiętny zmiennoprzecinkową, formalnie wprowadzone w wersji 2008 z IEEE 754 , jak również z normą ISO / IEC / IEEE 60559: 2011 .
Reprezentacja wartości dziesiętnych64
Znak | Połączenie | Kontynuacja wykładnika | Znacząca i kontynuacja |
---|---|---|---|
1 bit | 5 bitów | 8 bitów | 50 bitów |
s | mmmmm | xxxxxxxxx | cccccccccccccccccccccccccccccccccccccccccccccc |
IEEE 754 dopuszcza dwie alternatywne metody reprezentacji wartości dziesiętnych64. Norma nie określa, jak oznaczać, która reprezentacja jest używana, na przykład w sytuacji, gdy między systemami przesyłane są wartości dziesiętne64:
- W metodzie reprezentacji binarnej , 16-cyfrowe znaczenie i jest reprezentowane jako dodatnia liczba całkowita zakodowana binarnie, oparta na binarnej liczbie całkowitej dziesiętnej (BID).
- W metodzie reprezentacji dziesiętnej , 16-cyfrowy znak jest reprezentowany jako dziesiętna zakodowana dodatnia liczba całkowita, oparta na gęsto upakowanej liczbie dziesiętnej (DPD) z 5 grupami po 3 cyfry (z wyjątkiem najbardziej znaczącej cyfry zakodowanej specjalnie) są reprezentowane w dekletach (10 -bitowe sekwencje). Jest to dość wydajne, ponieważ 2 10 = 1024 to niewiele więcej niż potrzeba, aby nadal zawierać wszystkie liczby od 0 do 999.
Obie alternatywy zapewniają dokładnie ten sam zakres reprezentowalnych liczb: 16 cyfr znaczenia i 3 × 2 8 = 768 możliwych wartości wykładnika dziesiętnego. (Wszystkie możliwe wartości wykładników dziesiętnych, które można przechowywać w liczbie binary64, są reprezentowane w systemie decimal64, a większość bitów significand z binary64 jest przechowywana z mniej więcej taką samą liczbą cyfr dziesiętnych w significand.)
W obu przypadkach najbardziej znaczące 4 bity znaczącego (które w rzeczywistości mają tylko 10 możliwych wartości) są łączone z najbardziej znaczącymi 2 bitami wykładnika (3 możliwe wartości), aby użyć 30 z 32 możliwych wartości 5-bitowego pole. Pozostałe kombinacje kodują nieskończoności i NaN .
Pole kombinacji | Wykładnik msbitów | Znaczące i msbity | Inny |
---|---|---|---|
00mmm | 00 | 0xxx | — |
01mmm | 01 | 0xxx | — |
10mmm | 10 | 0xxx | — |
1100m | 00 | 100x | — |
1101m² | 01 | 100x | — |
1110m | 10 | 100x | — |
11110 | — | — | ±Nieskończoność |
11111 | — | — | NaN. Bit znaku zignorowany. Pierwszy bit pola kontynuacji wykładnika określa, czy sygnalizuje NaN. |
W przypadku Infinity i NaN wszystkie pozostałe bity kodowania są ignorowane. W ten sposób można zainicjować tablicę do Infinities lub NaNs, wypełniając ją wartością jednobajtową.
Pole binarnych liczb całkowitych i znaczące
Ten format wykorzystuje znaczenie binarne od 0 do 10 16 − 1 = 9 999 999 999 999 999 = 2386F26FC0FFFF 16 = 1000 1110000110 1111001001 1011111100 0000111111 1111111111 2 .
Kodowanie całkowicie przechowywana 64 bitów, mogą stanowić significands binarne do 10 x 2 50 - 1 = 11 258 999 068 426 239 = 27FFFFFFFFFFFF 16 , a wartość większa niż 10 16 - 1 jest nielegalna (i standard wymaga implementacji do leczenia je jako 0, jeśli napotkane na wejściu).
Jak opisano powyżej, kodowanie różni się w zależności od tego, czy najbardziej znaczące 4 bity znaczącego znajdują się w zakresie od 0 do 7 (0000 2 do 0111 2 ) lub wyższym (1000 2 lub 1001 2 ).
Jeśli 2 bity po bicie znaku to „00”, „01” lub „10”, to pole wykładnika składa się z 10 bitów następujących po bicie znaku, a significand to pozostałe 53 bity, z niejawnym początkowym 0 kawałek:
s 00eeeeeeee (0)ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt s 01eeeeeeee (0)ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt s 10eeeeeeee (0)ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt
Obejmuje to liczby podnormalne, w których wiodąca cyfra znacząca i cyfra wynosi 0.
Jeśli 2 bity po bicie znaku to „11”, to 10-bitowe pole wykładnika jest przesunięte o 2 bity w prawo (po obu bitach znaku i późniejszych bitach „11”), a reprezentowany znak znajduje się w pozostałych 51 bitów. W tym przypadku istnieje niejawna (to znaczy nie przechowywana) wiodąca sekwencja 3-bitowa „100” dla większości bitów prawdziwego znaczącego (w pozostałych niższych bitach ttt...ttt znaczącego, nie wszystkie możliwe wartości są używany).
s 1100eeeeeeee (100)t tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt s 1101eeeeeeee (100)t tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt s 1110eeeeeeee (100)t tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt
2-bitowa sekwencja „11” po bicie znaku wskazuje, że istnieje niejawny 3-bitowy przedrostek „100” dla znaczącego. Porównaj posiadanie niejawnego 1-bitowego prefiksu „1” w significand normalnych wartości dla formatów binarnych. Sekwencje 2-bitowe „00”, „01” lub „10” po bicie znaku są częścią pola wykładnika.
Wiodące bity pola significand nie kodują najbardziej znaczącej cyfry dziesiętnej; są po prostu częścią większej liczby czysto-binarnej. Na przykład znaczek 8 000 000 000 000 000 jest zakodowany jako binarny 0111 0001101011 1111010100 1001100011 0100000000 0000000000 2 , z 4 bitami na początku kodowania 7; pierwsza znacząca, która wymaga 54. bitu, to 2 53 = 9 007 199 254 740 992 . Najwyższym ważnym znaczącym jest 9 999 999 999 999 999, którego kodowanie binarne to (100)0 1110000110 1111001001 1011111100 0000111111 1111111111 2 (z 3 najbardziej znaczącymi bitami (100) nie są przechowywane, ale niejawne, jak pokazano powyżej; a następny bit jest zawsze zerem w prawidłowych kodowaniach).
W powyższych przypadkach reprezentowana wartość to
- (−1) znak × 10 wykładnik−398 × istotna
Jeśli cztery bity po bicie znaku to „1111”, to wartość jest nieskończonością lub NaN, jak opisano powyżej:
s 11110 xx...x ±infinity s 11111 0x...x a quiet NaN s 11111 1x...x a signalling NaN
Gęsto upakowane pole znaczeń dziesiętnych
W tej wersji znaczek jest przechowywany jako seria cyfr dziesiętnych. Cyfra wiodąca zawiera się w przedziale od 0 do 9 (3 lub 4 bity binarne), a reszta cyfry znaczącej używa kodowania gęsto upakowanego dziesiętnego (DPD).
Pierwsze 2 bity wykładnika i pierwsza cyfra (3 lub 4 bity) znaczącego są łączone w pięć bitów następujących po bicie znaku.
Kolejne osiem bitów to pole kontynuacji wykładnika, zapewniające mniej znaczące bity wykładnika.
Ostatnie 50 bitów to pole significi kontynuacji składające się z pięciu 10-bitowych dekletów . Każdy declet koduje trzy cyfry dziesiętne przy użyciu kodowania DPD.
Jeśli pierwsze dwa bity po bicie znaku to „00”, „01” lub „10”, to są to wiodące bity wykładnika, a trzy kolejne bity „TTT” są interpretowane jako wiodąca cyfra dziesiętna ( 0 do 7):
s 00 TTT (00)eeeeeeee (0TTT)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt] s 01 TTT (01)eeeeeeee (0TTT)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt] s 10 TTT (10)eeeeeeee (0TTT)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt]
Jeśli pierwsze dwa bity po bicie znaku to „11”, to drugie 2 bity są wiodącymi bitami wykładnika, a następny bit „T” jest poprzedzony niejawnymi bitami „100”, tworząc wiodącą cyfrę dziesiętną ( 8 lub 9):
s 1100 T (00)eeeeeeee (100T)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt] s 1101 T (01)eeeeeeee (100T)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt] s 1110 T (10)eeeeeeee (100T)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt]
Pozostałe dwie kombinacje (11 110 i 11 111) pola 5-bitowego po bicie znaku są wykorzystywane do reprezentowania odpowiednio ± nieskończoności i NaNs.
Transkodowanie DPD/3BCD dla dekletów podano w poniższej tabeli. b9...b0 to bity DPD, a d2...d0 to trzy cyfry BCD.
Zakodowana wartość DPD | Cyfry dziesiętne | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Przestrzeń kodowa (1024 stany) | b9 | b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | d2 | d1 | d0 | Zakodowane wartości | Opis | Zdarzenia (1000 stanów) | |
50,0% (512 stanów) | za | b | do | re | mi | fa | 0 | sol | h | ja | 0 abc | 0 def | 0 ghi | (0–7) (0–7) (0–7) | Trzy małe cyfry | 51,2% (512 stanów) | |
37,5% (384 stany) | za | b | do | re | mi | fa | 1 | 0 | 0 | ja | 0 abc | 0 def | 100 I | (0–7) (0–7) (8–9) | Dwie małe cyfry, jedna duża |
38,4% (384 stany) | |
za | b | do | sol | h | fa | 1 | 0 | 1 | ja | 0 abc | 100 f | 0 ghi | (0–7) (8–9) (0–7) | ||||
sol | h | do | re | mi | fa | 1 | 1 | 0 | ja | 100 centów | 0 def | 0 ghi | (8–9) (0–7) (0–7) | ||||
9,375% (96 stanów) | sol | h | do | 0 | 0 | fa | 1 | 1 | 1 | ja | 100 centów | 100 f | 0 ghi | (8–9) (8–9) (0–7) | Jedna mała cyfra, dwie duże |
9,6% (96 stanów) | |
re | mi | do | 0 | 1 | fa | 1 | 1 | 1 | ja | 100 centów | 0 def | 100 I | (8–9) (0–7) (8–9) | ||||
za | b | do | 1 | 0 | fa | 1 | 1 | 1 | ja | 0 abc | 100 f | 100 I | (0–7) (8–9) (8–9) | ||||
3,125% (32 stany, 8 używanych) | x | x | do | 1 | 1 | fa | 1 | 1 | 1 | ja | 100 centów | 100 f | 100 I | (8–9) (8–9) (8–9) | Trzy duże cyfry, bity b9 i b8 to nie obchodzi | 0,8% (8 stanów) |
Każda z 8 wartości dziesiętnych, których cyfry to 8 lub 9, ma cztery kody. Bity oznaczone x w powyższej tabeli są ignorowane na wejściu, ale zawsze będą równe 0 w wynikach obliczeń. (8 × 3 = 24 niestandardowe kodowania wypełniają lukę między 10 3 = 1000 a 2 10 = 1024.)
W powyższych przypadkach, gdy prawdziwe znaczenie i dekodowany ciąg cyfr dziesiętnych, reprezentowana wartość to
Zobacz też
- ISO/IEC 10967 , Arytmetyka niezależna od języka
- Pierwotny typ danych
- gru64