format zmiennoprzecinkowy decimal64 — decimal64 floating-point format

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:

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.

Gęsto upakowane zasady kodowania dziesiętnego
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ż

Bibliografia