decimal64 kayan nokta biçimi - decimal64 floating-point format

Olarak işlem , decimal64 a, ondalık kayan nokta , bilgisayar numaralandırma biçimi bilgisayar belleğinde 8 bayt (64 bit) kaplar. Mali ve vergi hesaplamaları gibi ondalık yuvarlamayı tam olarak taklit etmenin gerekli olduğu uygulamalar için tasarlanmıştır.

Decimal64 16 destekler ondalık basamak arasında significand ve üs +384 için -383 çeşitlerini, örneğin, ± 0.000 000 000 000 000 x 10 -383^ için ± 9.999 999 999 999 999 x 10 384^ . (Eşdeğer olarak, ±0 000 000 000 000 000 × 10 −398^ ila ±9 999 999 999 999 999 × 10 369^ .) Buna karşılık, en yaygın kullanılan tür olan karşılık gelen ikili biçim, yaklaşık ±0.000^ aralığına sahiptir. 000 000 000 001 × 10 −308 ila ±1.797 693 134 862 315 × 10 308^ . Anlamlı değer normalleştirilmediğinden, 16'dan az anlamlı basamağa sahip çoğu değerin birden çok olası temsili vardır; 1 × 10 2 = 0,1 × 10 3 = 0,01 × 10 4 , vb. Sıfırın 768 olası temsili vardır (1536, her iki imzalı sıfır dahil edilirse ).

Decimal64 kayan nokta resmen tanıtıldı nispeten yeni bir ondalık kayan nokta formatı vardır 2008 sürümü arasında IEEE 754 gibi olan , 2011: ISO / IEC / IEEE 60559 .

decimal64 değerlerinin temsili

İşaret kombinasyon Üs devamı önemli ve devamı
1 bit 5 bit 8 bit 50 bit
s mmmmm xxxxxxx cccccccccccccccccccccccccccccccccccccccccccccc

IEEE 754, decimal64 değerleri için iki alternatif gösterim yöntemine izin verir. Standart, örneğin ondalık 64 değerlerinin sistemler arasında iletildiği bir durumda, hangi gösterimin kullanıldığını belirtmez:

  • Olarak ikili temsil yöntemi , 16 basamaklı significand göre bir ikili kodlanmış bir pozitif tamsayı olarak temsil edilir ikili tamsayı ondalık (BID).
  • Olarak ondalık gösterim yöntemi , 16 basamaklı significand, bir ondalık kodlanmış pozitif tam sayı olarak temsil edilir göre yoğun şekilde paketlenmiş ondalık her declets temsil edilmektedir (özel olarak kodlanmış en önemli basamak hariç) 3 basamaklı 5 grup ile (DPD) (10 -bit dizileri). Bu oldukça verimlidir, çünkü 2 10 = 1024, 0'dan 999'a kadar olan tüm sayıları içermek için gerekenden sadece biraz daha fazladır.

Her iki alternatif de tam olarak aynı temsil edilebilir sayı aralığını sağlar: 16 basamaklı anlamlı ve 3 × 2 8  = 768 olası ondalık üs değeri. (Bir ikili64 sayısında depolanabilen tüm olası ondalık üs değerleri ondalık64'te gösterilebilir ve bir ikili64'ün anlamlısının çoğu biti, anlamlıda kabaca aynı sayıda ondalık basamak tutularak depolanır.)

Her iki durumda da, anlamlının en anlamlı 4 biti (aslında yalnızca 10 olası değere sahiptir), 5 bitin 32 olası değerinden 30'unu kullanmak için üssün en anlamlı 2 biti (3 olası değer) ile birleştirilir. alan. Kalan kombinasyonlar, sonsuzlukları ve NaN'leri kodlar .

kombinasyon alanı Üs Msbit'leri Önemli Msbit'ler Diğer
00mmmm 00 0xxx -
01mmmm 01 0xxx -
10 mm 10 0xxx -
1100m 00 100x -
1101m 01 100x -
1110m 10 100x -
11110 - - ±Sonsuz
11111 - - NaN. İşaret biti yoksayıldı. Üs devam alanının ilk biti, NaN'nin sinyal verip vermediğini belirler.

Infinity ve NaN durumlarında, kodlamanın diğer tüm bitleri yok sayılır. Böylece, bir diziyi tek bir bayt değeriyle doldurarak Sonsuzlara veya NaN'lere başlatmak mümkündür.

İkili tamsayı anlamlı alanı

Bu biçim, 0 ile 10 arasında bir ikili anlamlılık kullanır 16  − 1 = 9 999 999 999 999 999  = 2386F26FC0FFFF 16  = 1000 1110000110 1111001001 10111111100 0000111111 11111111111 2 .

Tamamen 64 bitte depolanan kodlama, 10 × 2 50  − 1 = 11 258 999 068 426 239  = 27FFFFFFFFFFFFFF 16'ya kadar ikili anlamlıları temsil edebilir , ancak 10 16  − 1'den büyük değerler geçersizdir (ve standart, uygulamaların ele alınmasını gerektirir). girişte karşılaşılırsa 0 olarak).

Yukarıda tarif edildiği gibi, kodlama significand en önemli 4 bit 0 ila 7 (0000 olup olmamasına bağlı olarak değişir 2 için 0111 2 ) ya da (1000 daha yüksek 2 ya da 1001 2 ).

İşaret bitinden sonraki 2 bit "00", "01" veya "10" ise, üs alanı işaret bitini takip eden 10 bitten oluşur ve anlamlı, başında 0 olmak üzere kalan 53 bittir. bit:

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

Bu, baştaki anlamlı basamağın 0 olduğu normal altı sayıları içerir .

İşaret bitinden sonraki 2 bit "11" ise, 10 bitlik üs alanı 2 bit sağa kaydırılır (hem işaret bitinden hem de "11" bitten sonra) ve temsil edilen anlamlı kalan değerdedir. 51 bit. Bu durumda, gerçek anlamlının çoğu biti için "100" önde gelen bir örtük (yani, saklanmayan) 3-bit dizisi vardır (anlamın geri kalan alt bitlerinde ttt...ttt , tüm olası değerler değildir Kullanılmış).

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

İşaret bitinden sonraki 2 bitlik "11" dizisi , anlamlı için 3 bitlik örtük bir "100" öneki olduğunu gösterir . İkili biçimler için normal değerlerin anlamlılığında örtük 1 bitlik "1" önekine sahip olanları karşılaştırın. İşaret bitinden sonraki 2 bitlik "00", "01" veya "10" dizileri üs alanının parçasıdır.

Do significand alanının lider bitleri değil en önemli ondalık basamak kodlamak; onlar sadece daha büyük bir saf ikili sayının parçasıdır. Örneğin, bir significand 8 000 000 000 000 000 ikili olarak kodlanmış 0111 0001101011 1111010100 1001100011 0100000000 0000000000 2 gelen 4 bit 7 kodlayan; 54. bit gerektiren ilk anlamlı 2 53  = 9 007 199 254 740 992'dir . Önemli yüksek geçerlidir 9 999 999 999 999 999 , ikili kodlama (100) 0 1110000110 1111001001 1011111100 0000111111 1111111111 2 (3 en önemli bit (100) depolanmış olan, ama ile örtülü yukarıda gösterildiği gibi ve bir sonraki bit her zaman sıfırdır geçerli kodlamalarda).

Yukarıdaki durumlarda, temsil edilen değer

(−1) işaret  × 10 üs−398  × anlamlı

İşaret bitinden sonraki dört bit "1111" ise, yukarıda açıklandığı gibi değer bir sonsuz veya bir NaN'dir:

s 11110 xx...x    ±infinity
s 11111 0x...x    a quiet NaN
s 11111 1x...x    a signalling NaN

Yoğun şekilde paketlenmiş ondalık anlamlı alan

Bu sürümde, anlam değeri bir dizi ondalık basamak olarak saklanır. Baştaki rakam 0 ile 9 (3 veya 4 ikili bit) arasındadır ve önemli olanın geri kalanı yoğun paketlenmiş ondalık (DPD) kodlamayı kullanır.

Üssün baştaki 2 biti ve anlamlının önde gelen basamağı (3 veya 4 bit), işaret bitini takip eden beş bitte birleştirilir.

Bundan sonraki sekiz bit, üssün daha az anlamlı bitlerini sağlayan üs devam alanıdır.

Son 50 bit, beş adet 10 bitlik decletten oluşan anlamlı ve devam alanıdır . Her declet, DPD kodlamasını kullanarak üç ondalık basamağı kodlar.

İşaret bitinden sonraki ilk iki bit "00", "01" veya "10" ise, bunlar üssün önde gelen bitleridir ve bundan sonraki üç "TTT" biti, ondalık basamak olarak yorumlanır ( 0 ila 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]

İşaret bitinden sonraki ilk iki bit "11" ise, o zaman ikinci 2 bit, üssün baştaki bitleridir ve sonraki "T" biti, baştaki ondalık basamağı oluşturmak için "100" örtük bitleri ile öneklenir ( 8 veya 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]

İşaret bitinden sonra 5 bitlik alanın kalan iki kombinasyonu (11 110 ve 11 111), sırasıyla ± sonsuz ve NaN'leri temsil etmek için kullanılır.

Decletler için DPD/3BCD kod çevrimi aşağıdaki tabloda verilmektedir. b9...b0 DPD'nin bitleridir ve d2...d0 üç BCD basamağıdır.

Yoğun paketlenmiş ondalık kodlama kuralları
DPD kodlanmış değer Ondalık basamak
Kod alanı (1024 durum) b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 d2 d1 d0 Değerler kodlandı Açıklama Olaylar (1000 eyalet)
%50.0 (512 eyalet) bir b c d e f 0 g h ben 0 abc 0 tanım 0 ghi (0–7) (0–7) (0–7) Üç küçük rakam %51,2 (512 eyalet)
%37,5 (384 eyalet) bir b c d e f 1 0 0 ben 0 abc 0 tanım 100 ben (0–7) (0–7) (8–9) İki küçük rakam,
bir büyük
%38.4 (384 eyalet)
bir b c g h f 1 0 1 ben 0 abc 100 f 0 ghi (0–7) (8–9) (0–7)
g h c d e f 1 1 0 ben 100 c 0 tanım 0 ghi (8–9) (0–7) (0–7)
%9,375 (96 eyalet) g h c 0 0 f 1 1 1 ben 100 c 100 f 0 ghi (8–9) (8–9) (0–7) Bir küçük rakam,
iki büyük
%9,6 (96 eyalet)
d e c 0 1 f 1 1 1 ben 100 c 0 tanım 100 ben (8–9) (0–7) (8–9)
bir b c 1 0 f 1 1 1 ben 0 abc 100 f 100 ben (0–7) (8–9) (8–9)
%3.125 (32 eyalet, 8 kullanıldı) x x c 1 1 f 1 1 1 ben 100 c 100 f 100 ben (8–9) (8–9) (8–9) Üç büyük rakam, bit b9 ve b8 umursamıyor %0,8 (8 eyalet)

Rakamlarının tümü 8'ler veya 9'lar olan 8 ondalık değerin her biri dört kodlamaya sahiptir. Yukarıdaki tabloda x ile işaretlenen bitler girişte yok sayılır , ancak hesaplanan sonuçlarda her zaman 0 olacaktır. (8 × 3 = 24 standart olmayan kodlama, 10 3  = 1000 ve 2 10  = 1024 arasındaki boşluğu doldurur .)

Yukarıdaki durumlarda, kodu çözülen ondalık basamak dizisi olarak gerçek anlamla, temsil edilen değer şudur:

Ayrıca bakınız

Referanslar