出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/08/06 20:44 UTC 版)
ナビゲーションに移動 検索に移動Densely packed decimal (DPD)は、二進化十進表現の一種で、情報量と計算量の両方で効率的な手法として提案されたものである。
十進法の1桁を二進法4ビットで表現する伝統的な方法であるBCDは、4ビットで表現可能な16個の状態の内10個のみしか使っておらず、無駄が多い。DPDは3桁(1000状態)を10ビット(1024状態の表現が可能)に押し込めるためより効率的であり、またこの圧縮にかかるハードウェアのコストはわずか2、3ゲートの遅延のみである[1]。
DPDはChen–Ho符号を洗練させたものである。圧縮率と速度の利点はそのままに、加えて特徴的なビットの配置により以下の利点がある。
1971年、陳天機(Tien Chi Chen)とIrving T. Hoが現在Chen-Ho符号化として知られる手法を考案した。これは3桁の10進数を10ビットに無劣化でパックする接頭符号表現であり、わずか2、3ゲートのハードウェア遅延でBCDとの間の変換が可能であった。DPDはこれを洗練させたものであり、マイク・カウリッショウ(Mike Cowlishaw)により考案された。DPDは浮動小数点表現の標準のIEEE 754-2008の、十進浮動小数点に取り入れられた。
Chen-Ho符号と同様、DPD符号は、各桁の数字を最上位ビットに応じて2種類に分類する。0から7(2進0000-0111)の「小さい」数字と、8および9(2進1000, 1001)の「大きい」数字である。ある数字が小さいことがわかっていれば、追加の3ビットでその数字を指定できる。ある数字が大きければ、追加のビットは1ビットのみで済む。 符号化において、対象の3つの数字それぞれの最上位ビットにより、残りのビットをエンコードするパターンが8つのうちから選択される。下表にそのパターンを示す。
| DPD符号 | 10進数字 | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| b9 | b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | d2 | d1 | d0 | 符号化元の値 | 説明 | |
| a | b | c | d | e | f | 0 | g | h | i | 0abc | 0def | 0ghi | (0–7) (0–7) (0–7) | 全て小さい数字 | |
| a | b | c | d | e | f | 1 | 0 | 0 | i | 0abc | 0def | 100i | (0–7) (0–7) (8–9) | 小2つ、大1つ | |
| a | b | c | g | h | f | 1 | 0 | 1 | i | 0abc | 100f | 0ghi | (0–7) (8–9) (0–7) | ||
| g | h | c | d | e | f | 1 | 1 | 0 | i | 100c | 0def | 0ghi | (8–9) (0–7) (0–7) | ||
| a | b | c | 1 | 0 | f | 1 | 1 | 1 | i | 0abc | 100f | 100i | (0–7) (8–9) (8–9) | 小1つ、大2つ | |
| d | e | c | 0 | 1 | f | 1 | 1 | 1 | i | 100c | 0def | 100i | (8–9) (0–7) (8–9) | ||
| g | h | c | 0 | 0 | f | 1 | 1 | 1 | i | 100c | 100f | 0ghi | (8–9) (8–9) (0–7) | ||
| x | x | c | 1 | 1 | f | 1 | 1 | 1 | i | 100c | 100f | 100i | (8–9) (8–9) (8–9) | 全て大きい数字 | |
下表は特徴的ないくつかの数について、10進数とそのBCD、Chan-Ho、DPDのビットパターンを示す。
| 10進数 | BCD | Chen–Ho | DPD |
|---|---|---|---|
| 005 | 0000 0000 0101 | 000 000 0101 | 000 000 0101 |
| 009 | 0000 0000 1001 | 110 000 0001 | 000 000 1001 |
| 055 | 0000 0101 0101 | 000 010 1101 | 000 101 0101 |
| 079 | 0000 0111 1001 | 110 011 1001 | 000 111 1001 |
| 080 | 0000 1000 0000 | 101 000 0000 | 000 000 1010 |
| 099 | 0000 1001 1001 | 111 000 1001 | 000 101 1111 |
| 555 | 0101 0101 0101 | 010 110 1101 | 101 101 0101 |
| 999 | 1001 1001 1001 | 111 111 1001 | 001 111 1111 |
Bonten, J.H.M.. “Packed Decimal Encoding IEEE-754r”. 2007年8月24日時点のオリジナルよりアーカイブ。2008年9月10日閲覧。