10進128浮動小数点形式

コンピューティングにおいてdecimal128はメモリ上で128ビットを占める10進浮動小数点 数形式です。IEEE 754-2008 [ 1]で正式に導入され、金融計算や税金計算など、10進数の丸めを正確にエミュレートする必要があるアプリケーションを対象としています。[2]

形式

decimal128 形式では、34桁の有効数字と -6143 ~ +6144 の指数範囲 (つまり、 ±0.000 000 000 000 000 000 000 000 000 000 000 000 × 10 -6143± 9.999 999 999 999 999 999 999 999 999 999 × 10 6144 )^サポートます有効数字正規ないため^、有効数字が 34 桁未満のほとんどの値は、 1 × 10 2 = 0.1 × 10 3 = 0.01 × 10 4など、複数の表現が可能です。同じ値のこの表現セットは、コホートと呼ばれます。ゼロには 12288 通りの表現方法があります (2 つの異なるコホートの両方の符号付きゼロが含まれる場合は 24576 通り)。

10進128値のエンコード

サイン組み合わせ仮数継続
1ビット17ビット110ビット
sんんんんんんんんんんcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

IEEE 754標準では、decimal128 値に対して 2 つの代替エンコードが許可されています。

この標準では、たとえば、システム間で 10 進 128 値が通信される状況で、どのエンコードが使用されるかを示す方法は指定されていません。

どちらの選択肢も、表現可能な数値のセットは全く同じです。34桁の仮数部と3 × 2 12 =12 288通りの指数値が可能です。

どちらの場合も、仮数部の上位4ビット(実際には10通りの値しか取れない)と指数部の上位2ビット(3通りの値しか取れない)を組み合わせることで、組み合わせフィールドの5ビットで32通りの値のうち30通りが使われます。残りの組み合わせは、無限大NaNをエンコードします。[説明が必要]

組み合わせフィールド指数仮数部ビット他の
00mmmmmmmmmmmmmmmm00xxxxxxxxxxxx0ccc
01んんんんんんんんんん01xxxxxxxxxxxx0ccc
10んんんんんんんんんん10xxxxxxxxxxxx0ccc
1100mmmmmmmmmmmm00xxxxxxxxxxxx100セント
1101mmmmmmmmmmmm01xxxxxxxxxxxx100セント
1110mmmmmmmmmmmmmm10xxxxxxxxxxxx100セント
11110mmmmmmmmmmmm±無限大
11111mmmmmmmmmmmmNaN。符号ビットは無視されます。組み合わせフィールドの6番目のビットは、NaNがシグナリングであるかどうかを判断します。

Infinity および NaN の場合、エンコードの他のすべてのビットは無視されます。[疑わしい議論]したがって、配列を 1 バイト値で埋めることで、配列を Infinity または NaN に初期化することができます。

BID 2進整数10進仮数フィールド

このフォーマットは 0 から10までの 2 進数の仮数部を使用します34 − 1 = 9 999 999 999 999 999 999 999 999 999 999 = 1ED09BEAD87C0378D8E63FFFFFFFF 16 = 0111 1011010000 1001101111 1010101101 1000011111 0000000011 0111100011 0110001110 0110001111 11111111111 1111111111 2。エンコーディングでは、10 × 2 110 − 1 = 12 980 742 146 337 069 071 326 240 823 050 239までの 2 進数の仮数を表現できますが、 10 34 − 1より大きい値は不正です (標準では、入力時に検出された場合、実装でそれらを 0 として扱う必要があります)。

上で説明したように、エンコードは、仮数部の上位 4 ビットが 0 ~ 7 (0000 2~ 0111 2 ) の範囲内であるか、それ以上 (1000 2または 1001 2 ) の範囲内であるかによって異なります。

符号ビットの後の 2 ビットが「00」、「01」、または「10」の場合、指数フィールドは符号ビットに続く 14 ビットで構成され、有効桁は残りの 113 ビットで、先頭に暗黙の 0 ビットが付きます。これには、先​​頭の有効桁が 0 である非正規数も含まれます。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

符号ビットの後の2ビットが「11」の場合、14ビットの指数フィールドは(符号ビットとそれに続く「11」ビットの両方の後)右に2ビットシフトされ、表現される仮数は残りの111ビットになります。この場合、真の仮数部には暗黙的に(つまり、格納されない)先頭の3ビットシーケンス「100」が存在します。符号ビットの後の2ビットシーケンス「11」は、仮数部の先頭に暗黙的に「100」の3ビットプレフィックスがあることを示しています。バイナリ形式の通常値の仮数部に暗黙的に1が含まれる場合と比較してください。「00」、「01」、または「10」ビットは指数フィールドの一部です。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

decimal128 形式の場合、これらの仮数部はすべて有効範囲外 ( 2 113 > 1.038 × 10 34で始まる) であるため、ゼロとしてデコードされますが、パターンはdecimal32およびdecimal64と同じです。

上記の場合、表される値は

(−1)符号× 10指数−6176 × 仮数部

符号ビットの後の 4 ビットが "1111" の場合、値は上記のように無限大または NaN になります。

s 11110 xx...x ±無限大s 11111 0x...xa 静かなNaNs 11111 1x...xa シグナリング NaN

DPD 高密度小数点仮数フィールド

このバージョンでは、仮数は一連の10進数として保存されます。先頭の桁は0から9(3または4ビットのバイナリ)の範囲で、残りの仮数は高密度10進数(DPD)エンコード方式を使用します。

指数部の先頭 2 ビットと仮数の先頭桁 (3 ビットまたは 4 ビット) が、符号ビットに続く 5 ビットに結合されます。

その後の 12 ビットは指数継続フィールドであり、指数の下位ビットを提供します。

最後の110ビットは仮数継続フィールドであり、11個の10ビットのデクレットで構成されています。[3]各デクレットはDPDエンコードを使用して3桁の10進数をエンコードします。 [3]

符号ビット後の最初の 2 ビットが "00"、"01"、または "10" の場合、それらは指数の先頭ビットであり、その後の 3 ビットは先頭の 10 進数字 (0 ~ 7) として解釈されます。符号ビット後の最初の 2 ビットが "11" の場合、次の 2 ビットは指数の先頭ビットであり、最後のビットの先頭に "100" が付加されて先頭の 10 進数字 (8 または 9) が形成されます。5 ビット フィールドの残りの 2 つの組み合わせ (11110 と 11111) は、それぞれ ± 無限大と NaN を表すために使用されます。s 00 TTT (00)eeeeeeeeeeee (0TTT)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt] s 01 TTT (01)eeeeeeeeeeee (0TTT)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt] s 10 TTT (10)eeeeeeeeeeee (0TTT)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt]s 1100 T (00)eeeeeeeeeeee (100T)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt] s 1101 T (01)eeeeeeeeeeee (100T)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt] s 1110 T (10)eeeeeeeeeeee (100T)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt]

Declet の DPD/3BCD トランスコーディングは次の表のようになります。b9...b0 は DPD のビットであり、d2...d0 は 3 つの BCD 桁です。

高密度10進符号化規則[4]
DPDエンコードされた値小数点
コード空間
(1024状態)
b9b8b7b6b5b4b3b2b1b0d2d1d0エンコードされた値説明発生件数
(1000州)
50.0%
(512州)
1つのbcdef0グラムh0 ABC0防御0(0~7) (0~7) (0~7)3桁の小数字51.2%
(512州)
37.5%
(384州)
1つのbcdef1000 ABC0防御100 i(0~7) (0~7) (8~9) 小さい数字2つ、大きい数字
1つ
38.4%
(384州)
1つのbcグラムhf1010 ABC100フィート0(0~7) (8~9) (0~7)
グラムhcdef110100セント0防御0(8–9) (0–7) (0–7)
9.375%
(96州)
グラムhc00f111100セント100フィート0(8–9) (8–9) (0–7)小さい数字1つ、大きい数字
2つ
9.6%
(96州)
dec01f111100セント0防御100 i(8–9) (0–7) (8–9)
1つのbc10f1110 ABC100フィート100 i(0~7) (8~9) (8~9)
3.125%
(32州、8州使用)
××c11f111100セント100フィート100 i(8–9) (8–9) (8–9)3つの大きな数字、
b9、b8: 無視
0.8%
(8州)

すべての桁が8または9である8つの10進数値には、それぞれ4つのコーディングがあります。上の表でx印が付けられたビットは入力時には無視されますが、計算結果では常に0になります。(8 × 3 = 24の非標準エンコーディングは、 10 3 = 10002 10 = 1024の間のギャップを埋めます。)

上記の場合、真の仮数をデコードされた10進数の列として表される値は

参照

参考文献

  1. ^ IEEEコンピュータ協会 (2008年8月29日). IEEE浮動小数点演算標準. IEEE . doi :10.1109/IEEESTD.2008.4610935. ISBN 978-0-7381-5753-5IEEE 規格 754-2008。
  2. ^ Cowlishaw, Mike (2007). 「10進演算に関するFAQ – パート1 – 一般的な質問」. speleotrove.com . IBM Corporation . 2022年7月29日閲覧
  3. ^ ab ミュラー、ジャン=ミシェル;ブリセバーレ、ニコラス。デ・ディネシン、フィレンツェ。ジャンヌロ、クロード・ピエール。ルフェーブル、ヴァンサン。メルキオンド、ギョーム。ナタリー・レボル;ステレ、ダミアン。トーレス、セルジュ (2010)。浮動小数点演算ハンドブック (第 1 版)。ビルクホイザー土井:10.1007/978-0-8176-4705-6。ISBN 978-0-8176-4704-9LCCN  2009939668。
  4. ^ Cowlishaw, Michael Frederic (2007-02-13) [2000-10-03]. 「高密度パック10進符号化の概要」. IBM . 2015年9月24日時点のオリジナルよりアーカイブ2016年2月7日閲覧。
Retrieved from "https://en.wikipedia.org/w/index.php?title=Decimal128_floating-point_format&oldid=1308966062"