高密度パック 10 進数( DPD ) は、 10 進数をバイナリでエンコードするための効率的な方法です。
10進数の従来の2進エンコード方式は2進化10進数(BCD)と呼ばれ、各桁をエンコードするのに4ビットを使用するため、パックBCDを使用する場合でも、バイナリデータ帯域幅が大幅に浪費されます(4ビットで16の状態を保存できるのに、10の状態しか保存できないため)。高密度パック10進数は、3桁を10ビットにパックするより効率的なコードで、ハードウェアゲート遅延を2つまたは3つだけ使用してBCDからの圧縮またはBCDへの拡張を可能にする方式を使用しています。[1]
高密度10進符号化はChen-Ho符号化の改良版であり、同じ圧縮と速度の利点が得られますが、使用されるビットの特定の配置によって追加の利点が得られます。
- 1 桁または 2 桁の圧縮 (それぞれ最適な 4 ビットまたは 7 ビット) は、3 桁エンコードのサブセットとして実現されます。つまり、任意の数の 10 進数 (3 桁の倍数だけでなく) を効率的にエンコードできます。たとえば、38 = 12 × 3 + 2 の 10 進数は、12 × 10 + 7 = 127 ビットでエンコードできます。つまり、12 セットの 3 桁の 10 進数は、12 セットの 10 進ビットを使用してエンコードでき、残りの 2 桁の 10 進数は、さらに 7 バイナリ ビットを使用してエンコードできます。
- 上記のサブセット エンコーディングは、標準の 3 桁エンコーディングの右端のビットに過ぎません。先頭に 0 ビットを追加するだけで、エンコードされた値を拡張できます。
- すべての 7 ビット BCD 数値 (0 から 79) は、DPD によって同じようにエンコードされます。これにより、一般的な小さな数値の変換が簡単になります。(80 では BCD に 8 ビットが必要なため、この変換は 80 で失敗しますが、上記のプロパティでは DPD エンコードが 7 ビットに収まる必要があります。)
- 各桁の下位ビットは変更されずにコピーされます。したがって、エンコードの重要な部分は、3 つの 5 進数から 7 つのバイナリ ビットへの変換と見なすことができます。さらに、桁ごとの論理値(各桁が 0 または 1 のいずれか) は、エンコードやデコードを必要とせずに直接操作できます。
歴史
1969年にTheodore M. Hertzが、1971年にTien Chi Chen (陳天機)とIrving Tze Ho (何宜慈)は、ロスレスプレフィックスコード( HertzおよびChen–Hoエンコーディングと呼ばれる[2])を考案しました。これは、ハードウェアでわずか2ゲートまたは3ゲートの遅延でBCDからの圧縮またはBCDへの拡張を可能にする方式を使用して、3桁の10進数を10のバイナリビットにパックします。高密度パック10進数は、これを改良したもので、2002年にMike F. Cowlishawによって考案され[1]、 10進浮動小数点のIEEE 754-2008 [3]およびISO/IEC/IEEE 60559:2011 [4]標準に組み込まれました。
エンコーディング
Chen–Ho エンコーディングと同様に、DPD エンコーディングは、バイナリ形式の最上位ビットに応じて、各 10 進数字を 2 つの範囲のいずれかに分類します。「小さい」数字の値は 0 から 7 (バイナリ 0000 から 0111) で、「大きい」数字の値は 8 から 9 (バイナリ 1000 から 1001) です。数字が小さいことがわかっているか示されている場合、値を指定するにはさらに 3 ビットが必要です。大きい値が示されている場合は、値 8 と 9 を区別するのに 1 ビットのみが必要です。
エンコード時には、エンコードする 3 桁のそれぞれの最上位ビットによって、次の表に従って残りのビットの 8 つのコーディング パターンの 1 つが決定されます。表は、デコード時に、列b9からb0のコード化された形式の 10 ビットが3 桁d2からd0にコピーされ、残りのビットが定数 0 または 1 で埋められる様子を示しています。
ビット b7、b4、b0 ( c、 ) は変更されずにエンコードされ、他のビットの意味には影響しません。残りの 7 ビットは、3 つの 5 進数の 7 ビット エンコードfとi見なすことができます。
ビット b8 と b9 は、3 つの大きな数字 (上記の表の最後の行で「x」としてマークされている) を持つ DPD グループをデコードするときには不要であり無視されますが、エンコードするときにはゼロで埋められます。
すべての桁が 8 または 9 である 8 つの 10 進数値には、それぞれ 4 つのコーディングがあります。上の表で x でマークされているビットは入力時には無視されますが、計算結果では常に 0 になります。(3 × 8 = 24 の非標準エンコーディングは、10 3 = 1000 と 2 10 − 1 = 1023 の間のギャップを埋めます。)
例
この表は、いくつかの代表的な 10 進数と、BCD、Chen–Ho、高密度 10 進数 (DPD) でのエンコードを示しています。
参照
- 2進化10進数(BCD)
- 2進整数10進数(BID)
- 10進数32 浮動小数点形式
- 10進64浮動小数点形式
- 10進128浮動小数点形式
- 10進数基数50 / MOD40
- IBM スクオーズ
参考文献
- ^ ab Cowlishaw, Michael Frederic (2002-08-07) [2002年5月]。「高密度パック10進エンコーディング」。IEE Proceedings - Computers and Digital Techniques。149 (3)。ロンドン、英国:電気技術者協会:102– 104。doi : 10.1049/ip-cdt:20020407(非アクティブ2024-12-07)。ISSN 1350-2387。2017-05-20 にオリジナルからアーカイブ。2016-02-07に取得。
{{cite journal}}: CS1 メンテナンス: DOI は 2024 年 12 月時点で非アクティブです (リンク) - ^ Cowlishaw, Michael Frederic (2014) [2000 年 6 月]。「Chen-Ho Decimal Data encoding の概要」。IBM。2015年9 月 24 日時点のオリジナルよりアーカイブ。2016 年 2 月 7 日閲覧。
- ^ IEEE Computer Society (2008-08-29). IEEE 浮動小数点演算標準. IEEE . doi :10.1109/IEEESTD.2008.4610935. ISBN 978-0-7381-5753-5. IEEE Std 754-2008 . 2016年2月8日閲覧。
- ^ ISO/IEC/IEEE 60559:2011. 2011年. 2020年6月3日時点のオリジナルよりアーカイブ。 2016年2月8日閲覧。
- ^ Cowlishaw, Michael Frederic (2007-02-13) [2000-10-03]. 「高密度パック10進数エンコーディングの概要」. IBM . 2015-09-24時点のオリジナルからアーカイブ。2016-02-07に取得。
さらに読む
- Cowlishaw, Michael Frederic (2003-02-25) [2002-05-20, 2001-01-27]。英国コベントリーで執筆。「10 進数から 2 進数へのコーダ/デコーダ」(米国特許)。米国ニューヨーク州アーモンク: International Business Machines Corporation ( IBM)。US6525679B1。2018-07-18取得。[1] およびCowlishaw, Michael Frederic (2007-11-07) [2004-01-14, 2002-08-14, 2001-09-24, 2001-01-27]。英国ハンプシャー州ウィンチェスターで執筆。「10 進数から 2 進数へのコーダ/デコーダ」(欧州特許)。米国ニューヨーク州アーモンク: International Business Machines Corporation (IBM)。EP1231716A2。2018年 7 月 18 日に取得。[2][3][4] (注:この特許はDPDに関するものです。)
- Bonten, Jo HM (2009-10-06) [2006-10-05]. 「Packed Decimal Encoding IEEE-754-2008」. ゲルドロップ、オランダ。2018-07-11 にオリジナルからアーカイブ。2018-07-11に取得。(注: 古いバージョンは、Packed Decimal Encoding IEEE-754r で見つかります。)
- Savard, John JG (2018) [2007]. 「Chen–Ho エンコーディングと高密度パック小数点」. quadibloc . 2018-07-03 にオリジナルからアーカイブ。2018-07-16に取得。
