IEEE 754-2008規格には、仮数部と指数部(およびNaNのペイロード)を2つの方法でエンコードできる10進浮動小数点数形式が含まれており、バイナリエンコードと10進エンコードと呼ばれる。[1]
どちらの形式でも、数値は符号ビットs、指数q ( q minからq maxの間)、およびp桁の仮数c (0 から 10 p −1の間) に分解されます。エンコードされた値は (−1) s ×10 q × cです。どちらの形式でも可能な値の範囲は同じですが、仮数c の表現方法が異なります。10 進エンコードでは、これはp 桁の 10 進数としてエンコードされます (高密度 10 進数(DPD) エンコードを使用)。これにより、10 進形式への変換が効率的になりますが、処理には専用の 10 進ALU が必要になります。2進整数 10 進数( BID ) エンコードでは、これは 2 進数としてエンコードされます。
形式
2 10 = 1024 は 10 3 = 1000よりわずかに大きいだけであるという事実を利用すると、3 n桁の 10 進数は 10 nバイナリ ビットに効率的にパックできます。ただし、IEEE 形式には 3 n +1 桁の仮数部があり、これを表すには通常 10 n +4 バイナリ ビット が必要です。
これは効率的ではありません。追加の 4 ビットの 16 個の可能な値のうち 10 個しか必要ではないからです。指数範囲が 3×2 kの形式であるため、指数が で始まることはないという事実を利用して、より効率的なエンコードを設計できます。Decimal3211エンコード (仮数が 3*2+1 桁) を例として使用します ( はe指数、mは仮数、つまり仮数を表します)。
- 仮数が で始まる場合
0mmm、先頭の 0 ビットを省略すると仮数が 23 ビットに収まります。
s 00eeeeee (0)mmm mmmmmmmmmm mmmmmmmmmm s 01eeeeee (0)mmm mmmmmmmmmm mmmmmmmmmm s 10eeeeee (0)mmm mmmmmmmmmm mmmmmmmmmm
- 仮数が で始まる場合
100m、先頭の 100 ビットを省略すると、仮数が 21 ビットに収まります。指数は 2 ビットシフトされ、ビットペア11はこの形式が使用されていることを示します。
s 1100eeeeee (100)m mmmmmmmmmm mmmmmmmmmm s 1101eeeeee (100)m mmmmmmmmmm mmmmmmmmmm s 1110eeeeee (100)m mmmmmmmmmm mmmmmmmmmm
- 無限大、静かなNaN、シグナリング NaN は、次で始まるエンコーディングを使用します
s 1111:
s 11110 xxxxxxxxxxxxxxxxxxxxxxxxxxxxx s 111110 xxxxxxxxxxxxxxxxxxxxxxxxx 111111 xxxxxxxxxxxxxxxxxxxxxxxxxxxx
括弧内に示されているビットは暗黙的です。つまり、Decimal32 エンコードの 32 ビットには含まれませんが、符号ビットの後の 2 ビットによって暗黙的に示されます。
Decimal64 および Decimal128 エンコーディングには、より大きな指数フィールドと仮数フィールドがありますが、動作は同様です。
Decimal128 エンコードの場合、113 ビットの仮数部は実際には 34 桁の 10 進数をエンコードするのに十分であり、2 番目の形式は実際には必要ありません。
コホート
10 進浮動小数点数は複数の方法でエンコードできます。異なる方法は異なる精度を表します。たとえば、100.0 は 1000×10 −1としてエンコードされ、100.00 は 10000×10 −2としてエンコードされます。同じ数値の可能なエンコードのセットは、標準ではコホートと呼ばれます。計算結果が不正確である場合、必要な指数とともに仮数部に格納できる最大の整数を持つコホート メンバーを選択することで、最大量の重要なデータが保持されます。
範囲
提案されている IEEE 754r 標準では、数値の範囲が 10 n −1 という形式の仮数に制限されています。ここで、n は、小数点の丸めが正しく実行されるように、使用可能なビットに格納できる小数点の整数桁数です。
パフォーマンス
バイナリエンコードは、文字列( ASCII、Unicodeなど)やBCDなどの10進エンコードされたデータとの間の変換では本質的に効率が悪い。したがって、バイナリエンコードは、データが10進数ではなくバイナリである場合にのみ選択するのが最適です。IBMは未検証のパフォーマンスデータを公開しています。[2]
参照
参考文献
- ^ 「浮動小数点演算の標準ドラフト P754」(PDF) 2006-10-04 . 2007-07-01に閲覧。[永久リンク切れ ]
- ^ 「10進ライブラリのパフォーマンス - 1.01」。
さらに読む
- Savard, John JG (2018) [2007]. 「10進浮動小数点標準」. quadibloc . 2018-07-03にオリジナルからアーカイブ。2018-07-16に取得。
