二進化十進表現
- العربية
- Azərbaycanca
- বাংলা
- Català
- Čeština
- Dansk
- Deutsch
- English
- Esperanto
- Español
- Eesti
- فارسی
- Suomi
- Français
- Gaeilge
- עברית
- हिन्दी
- Hrvatski
- Magyar
- Bahasa Indonesia
- Italiano
- 한국어
- Lombard
- Lietuvių
- Latviešu
- Mirandés
- Nederlands
- Polski
- Português
- Русский
- සිංහල
- Simple English
- Slovenčina
- Српски / srpski
- Svenska
- ไทย
- Türkçe
- Українська
- اردو
- Tiếng Việt
- 中文
- 粵語
- 英語版記事を日本語へ機械翻訳したバージョン(Google翻訳)。
- 万が一翻訳の手がかりとして機械翻訳を用いた場合、翻訳者は必ず翻訳元原文を参照して機械翻訳の誤りを訂正し、正確な翻訳にしなければなりません。これが成されていない場合、記事は削除の方針G-3に基づき、削除される可能性があります。
- 信頼性が低いまたは低品質な文章を翻訳しないでください。もし可能ならば、文章を他言語版記事に示された文献で正しいかどうかを確認してください。
- 履歴継承を行うため、要約欄に翻訳元となった記事のページ名・版について記述する必要があります。記述方法については、Wikipedia:翻訳のガイドライン#要約欄への記入を参照ください。
- 翻訳後、
{{翻訳告知|en|Binary-coded decimal|...}}
をノートに追加することもできます。 - Wikipedia:翻訳のガイドラインに、より詳細な翻訳の手順・指針についての説明があります。
二進化十進数 (BCD、Binary-coded decimal ) とは、コンピュータにおける数値の表現方式の一つで、十進法の1桁を、0から9までを表す二進法の4桁で表したものである[1] 。「二進化十進符号」などとも呼ばれる。3増し符号など同じ目的の他の方式や、より一般的に、十進3桁を10ビットで表現するDensely packed decimalなども含めることもある。
概要
[編集 ]一般に二進法の4桁(ニブル)は、0から15までの整数を表すことができる。二進化十進法ではこのうちの最初の10個を有効な数値として扱う。
十進法 | BCD表現 |
---|---|
0 | 0000 |
1 | 0001 |
2 | 0010 |
3 | 0011 |
4 | 0100 |
5 | 0101 |
6 | 0110 |
7 | 0111 |
8 | 1000 |
9 | 1001 |
例えば、127 という整数値は、 0001、0010、0111 という3つのBCDで表される。
二進化十進数には、ゾーン形式とパック形式があり、用途に応じて使い分けられる。
符号部を持たないパック形式では、ファイルなどの中の二進化十進数値を十六進法で表示すると十進と同じように表示される。例えば、十六進で「1234」と表示されるデータは、整数値 1234 のことである。また、機種や文字コードに依存するものの、一般にゾーン形式では8ビット文字表示すると十進と同じように表示される。ただし、符号部を持つ場合も多く、上記の表示が必ずしもわかりやすいとは言えないこともある。
簡単な利用法としては、電子回路上で、0 - 9を表示可能なBCD対応の数字表示素子1つに対してBCDの4桁を4本の入力信号として直接入力する、等の使われ方がある。二進法で扱う場合と違い、表示素子に入力する前の変換が要らずデータバス上の信号をそのまま利用できるというメリットがある。
二進法で計算を行う多くのコンピュータでは、二進化十進表現を使用する機能(または、計算結果を補正するための機能)を備えている。
本来、コンピュータでは二進法で演算するのがコンピュータ資源(レジスタ、メモリ、計算量)の有効利用になる。それでも二進化十進数が有効な場合があるのは、二進法と十進法との変換を回避することに「社会的な価値」があるからである。つまり二進化十進数は純粋なコンピュータの問題ではなく、十進法社会という現実からの要請による。
「社会的な価値」の具体例として、小数の丸め処理が挙げられる。0.1 のような値は十進法では有限桁で表記可能だが、二進法では無限桁の循環小数となる。このため、一般的な二進法の浮動小数点数演算では 0.1 の表現に丸め誤差があるので、それを繰り返し足し込むと誤差の影響が無視できなくなることがある。例えば以下の Java プログラムを実行すると、double 型を使って 0.1 を 10,000 回加えた結果は 1,000.0 ではなく 1,000.0000000001588 となることがわかる。
publicstaticvoidmain(String[]args){ doublesum=0.0; for(inti=0;i<10000;i++) sum+=0.1; System.out.println("sum = "+sum); }
このような問題を避けるため、処理対象の値が十進の場合は、コンピュータ内の処理も二進化十進数で実装されることが少なくない。通貨を扱う事務アプリケーションなどが、しばしばこのケースに該当する。
なお、10.0 / 3.0 を計算する時には全く何も変わらない同様の問題を十進でも抱えている。このようなケースでは、二進化十進数でも正確に表す事はできない。
デ=ジュレ標準による標準化の要請が根強く存在していることもあって、浮動小数点表現の標準であるIEEE 754に2008年の改訂で十進浮動小数点が追加された。これには、より効率の良い Densely packed decimal(DPD)方式が採用された。
出典
[編集 ]- ^ P.HAYES, JOHN (1978,1979). Computer Architecture and Organization. McGRAW-HILL INTERNATIONAL BOOK COMPANY. p. 155-156. ISBN 0-07-027363-4