打ち切る際に出来るだけ桁数を多く取れば誤差を減らすことは出来ますが、誤差を無くすことは出来ません。10進数に近い形で数値を表現する方法コンピュータ内部で扱われるデータは2進数が使われますが、コンピュータに入力される数値は10進数の場合が多いため、単純に2進数に変換しただけだと、誤差が発生しやすくなります。その為、10進数の値を2進数に変換せずに表現する方法が考えられてきました。ゾーン10進数とパック10進数です。ゾーン10進数は1桁を8ビットで表現し、パック10進数は1桁を4ビットで表現します。いずれも、10進数書く桁の数字を4ビットの2進数で表現したBCDコードというものを使います。BCDコードとは、10進数の各桁の数字を4ビットの2進数で表したもので、10進数を2進数に変換し、4ビット中の残りの上位ビットに0を入れたものです。1001なお、BCDコードで表現した2進化10進数といいます。ゾーン10進数(アンパック10進数)ゾーン10進数は8ビット(=1バイト)で10進数1桁を表現する方法です。8ビットを上位4ビットのゾーン部と、下位4ビットの数値部に分け、数値部は先述のBCDコードを使って表します。ゾーン部の値は、汎用コンピュータなどで使われるEBCDIC方式では「1111」、JIS方式では「0011」が用いられます。ゾーン10進数で10進数を表現する場合、数値の桁数分のバイト数が必要となり、格納効率はよくありません。数字を表す文字コードとの相性が良く、数値と文字の変換が行いやすくなっています。パック10進数パック10進数は8ビット(=1バイト)で10進数2桁を表現する方法です。8ビットを4ビットずつに分けて数値部とします。数値部はゾーン10進数と同様にBCDコードを使って表します。最下位の4ビットを符号部とし、符号を入れます。パック10進数はゾーン部を省略してまとめてパックしたイメージとなります。パック10進数で10進数を表現する場合には、桁数の約半分のバイト数が必要で、ゾーン10進数と比べると格納効率にまさり、計算などに適しています。正負の数を2進数で扱うためには、プラスかマイナスかを示す符号用に1ビット分を使います。この際、先頭のビットが0ならば正の数、1ならば負の数とするのが一般的です。具体的な方法としては、以下の3つの方法が用いられています。111111011(2)この内、絶対値に符号を付ける方法と1の補数を用いる方法の場合、「+0」と「ー0」という同じ値が2つの方法で表現されてしまい、僅かにですが同じビット数で表現できる数値の範囲が少なくなってしまいます。限られたビット数でできるだけ広い範囲の値を表現したいコンピュータにとっては余り良い方法ではないため、2の補数を用いる方法が一般的となっています。補数とは、「補う数」と言う名のとおり、それを足すとちょうど桁上りの基準値になる数のことです。10進数の場合、基数が10nなので、7にとっての10の補数は4、8にとっての10の補数は2となります。10(2)と求められます。10(2)なお、2の補数は「元の数のビットを全て反転し、1を足す」という方法で簡単に求められます。この方法の場合、結果的に負の数の先頭ビットが常に0になるため、先頭ビットが符号ビットの役割も果たします。負数を扱う時に「2の補数」を用いると、限られたビット数で表現できる値の範囲が広くなるメリットの他に、「引き算を足し算の仕組みのままで計算できる」というメリットがあります。一般的な10進数の計算でも、式を変形して以下のように引き算の式を「負数による加算」とすることが出来ますが、考え方は同じです。4同様に、2進数の引き算を「負数による加算」で行なってみます。解が正数になる場合、負数になる場合両方を見てみましょう。*今回は8ビットを使って正負の整数を表すものとします。-2負数を2の補数で扱うことで、コンピュータにとっては加算命令だけで足し算も引き算もできるようになるため、演算機能が簡略化出来ます。人間が2の補数で計算する際には、「最上位で桁上りしたビットは無視する」という手順が必要になりますが、コンピュータの場合、「整数を8ビットで表す」としている場合、桁上りして発生した最上位の9ビット目は無視されてしまうため、わざわざ「最上位で桁上りした場合」ということを考える必要も無いのです。小数の表現を理解する。小数の表現方法には固定小数点数と浮動小数点数があります。固定小数点数コンピュータで負の数を含む整数の数値データを扱うときは、固定小数点数という方式を使うのが一般的です。固定小数点数では、次のようにデータを記憶します。データの格納に必要なビット長の記憶領域をあらかじめ用意する。小数点の位置を決めて、各桁の2進数値を各ビットに当てはめる。先頭の1ビットを正負の符号ビットとして扱う。文字通り小数点の位置が浮いて移動するように見えるので、浮動小数点数と呼ばれています。この方式では、非常に大きな数や小さい数を扱うことが出来ます。いう非常に大きな値となります。同じ数値を仮数部、指数部の調整次第でいろいろな表現が可能になります。コンピュータにとって表現方法が一定ではないのは都合が悪いため、仮数部の小数第1位に0以外が来るようにします。このことを正規化とよんでいます。仮数部の整数部が基数1桁に収まるようにすることを正規化とする場合もあります。後述する「バイアス表現」を使う場合に、この方法を使います。仮数部の符号は、0か正の数の場合は0を、負の数の場合は1とします。指数部は基数を何乗するのかという値を入れます。表現形式にはいくつかの種類があります。ここでは、24ビットの浮動小数点数について、『バイアス表現』と使わない形式と使う形式を紹介します。*バイアス:下駄履き、底上げバイアス表現を使わない形式24ビットの内、1ビットを符号ビット、7ビットを指数部、16ビットを仮数部とします。