コンピュータと10進法

10進法の 0.1 (1/10) を 2進法に変換すると無限小数になることからわかったように、 計算の目的によっては、10進法で計算したほうがよいこともある。

では、どのようにして10進で計算すればよいだろうか。 昔は10進計算のための専用回路を持ったコンピュータがあった。 しかし、そのような回路は複雑になるため、 今はそのような設計のコンピュータは(ほとんど)ない。 (10進計算を多少高速化するための命令を持っているケースはあるが…。) 2進計算や論理演算を組み合わせてソフトウェア的に10進計算をするのが普通である。

では、10進数をどのように計算機内部で表現すればよいだろうか? それには何通りかの方法が考えられるが、1つの方法は以下に述べる2進化10進コードと呼ばれるものである。

2進化10進コード(Binary Coded Decimal, BCD)

4ビットあると0から15まで表せた。これによって、10進の1ケタが表せる。 つまり、0から9までだけを使って残りは使わない(少しムダがある)。 0000(2進) から 1001(2進) だけを使って、1010 から 1111 までの6パターンは 使わない。 こうして、10進数の各ケタを4ビットの2進数に機械的に置き換えて行く。

例えば、75(10進)を2進で表すとする。 7 は2進4ビットで 0111。5は2進4ビットで0101。よって、 75 を BCD で表すと、01110101 になる。(ただ並べるだけ!) 小数の場合も同じ。0.57なら、 0.01010111 とする。けち表現は使えない。

このようにすれば、2進法の表現の中で、10進法を表現できる。 同様にして、何進法であっても、2進法の表現の中に埋め込める。

ただし、埋め込んで得られた表現を用いた各種演算(+、−、×、÷など)は、 一般に複雑になってしまう。(上で言ったように、2進演算と、演理演算を組み 合わせて演算しないといけない。)

10進と2進の間の変換にはけっこう手間がかかる。 ケタ数が非常に多い時には、かなりの時間がかかってしまう。 例えば、円周率をたくさんのケタ求めるような場合、全体の計算時間のうち、 10進2進変換がかなりの時間をしめる。 計算によっては、最初から10進だけで計算したほうがよいこともある。 自然対数の底 e = 2.718281828...の計算では、最初から10進で高速に計算する方法が存在する。