打ち切る際に出来るだけ桁数を多く取れば誤差を減らすことは出来ますが、誤差を無くすことは出来ません。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ビット目は無視されてしまうため、わざわざ「最上位で桁上りした場合」ということを考える必要も無いのです。私たちが一般的に数値を扱うときには0~9までの数字を使う、「10進法」を用いています。一方で通信やコンピュータの分野では「2進法」「8進法」「16進法」などが使われます。10進法では0~9までの数字を使い、「10」を桁上りの基準としていますが、2進数では「2」、16進数では「16」が桁上りの基準としています。この桁上りの基準をどの値にするか、0からどの数字(文字)までを使って数を表すかを決めたものを「記数法」といいます。一般的には、桁上りの基準の値を用いて「n進法:nを基準に桁上りする」となっています。103」と表すことも出来ます。この時の1を「仮数」、10を「基数」、103を「重み」といい、10進数の各桁はこの表現による値となっています。言い換えれば、「基数」は桁上りの基準で、「仮数」は実際に表示されている数字、「重み」はどの桁かを表す値となります。(但し、重みの桁数は0が1の位となる点に注意)このように、nを基数として数値を表す記数法を「n進数」といいます。n進数で小数を表すときには、「n-1」「n-2」といった重みを使います。前提として、以下の法則を覚えておくこと。(nの「0乗」は必ず1になる。nxこれらを踏まえて、「1234.567」という10進数の数値を基数と重みを使った表現で表すと下の式および図のようになります。10-3基数と重みー2進数の場合2進数は2を基数とする数え方です。2を基準に桁上りするので、数の表記には0と1のみを使います。2進数の「1010」という値を重みを使った表現で表すと以下のようになります。202進数の加算と減算2進数同士の加算、減算は10進数の時と同様、筆算で解くことが出来ます。10110(2)基数変換また、10進数と2進数など、n進数同士は互いに変換することが出来ますが、この変換のことを「基数変換」といいます。10進数と2進数の変換2進数を10進数に変換2進数を10進数に変換するには、各桁の数に重み(2のべき乗)を掛けて合計します。10進数を2進数に変換(整数部分)10進数の整数を2進数に変換するには、10進数を商が0になるまで2で割り続け、余りを拾い出して順に並べると2進数になる。*拾い出して並べる順は図を参照。10進数を2進数に変換(小数部分)10進数の小数を2進数に変換するには、10進数を2倍し、1の位を取り出す、という作業を小数部分がなくなるまで繰り返す。*拾い出して並べる順は図を参照。8進数と16進数コンピュータ内部では情報は2進数で扱われているので、そのまま表記したいところですが、少し大きな値になると桁数が非常に多くなってしまい、ただでさえ分かりにくい2進数がさらに分かりにくくなります。そこで桁数を少なくするためのテクニックとして、8進数や16進数を用います。8進数の1桁は、2進数の3桁に対応し、16進数の1桁は2進数の4桁に対応するため、2進数から8進数・16進数には簡単に置き換えることが出来るためです。2進数と8進数・16進数を変換するには、以下の表で対応を覚えてしまいましょう。102進数と8進数の変換2進数の3桁は、8進数の1桁に対応しています。これを利用し、小数点を基準に3桁ずつ区切り、それぞれを8進数に変換していくと8進数の値となります。*3桁に足りない部分は0を補います。整数部の場合は左に、小数部の場合は右に補います。2進数と16進数の変換2進数の4桁は、16進数の1桁に対応しています。これを利用し、小数点を基準に4桁ずつ区切り、それぞれを16進数に変換していくと16進数の値となります。*4桁に足りない部分は0を補います。整数部の場合は左に、小数部の場合は右に補います。情報を表す単位コンピュータ内部では、電流のON/OFFによって情報を表現しています。この電流のON/OFFを数字に置き換えた場合、0と1の2つの数字のみを使う2進数のほうが都合が良いため、コンピュータ内部でデータを処理する場合には2進数が用いられています。1)がコンピュータで扱うデータの最小単位で、「ビット(bit)」といいます。1ビットの情報量で表せるデータの範囲は、2進数1桁分ですので、0か1の2パターンです。ビットで表すことの出来る範囲1ビット(=2進数1桁)で表すことの出来る情報は0か1の2通りです。これを2桁分使うと、「00」「01」「10」「11」の4通りが表せます。2=21、4=22ですので、nビット(2進数n桁)では、2n通りの情報を表すことが出来ます。バイトデータの最小単位はビットですが、記憶装置の保存容量などを表す単位として「バイト(byte)」という単位もよく使われます。8ビット」として換算しますので、1バイトで表すことの出来る範囲は28で256通りとなります。・コンピュータの中では、情報は「0」か「1」かになる・コンピュータは人間が組み込んだプログラム(=アルゴリズム)を忠実に再現するこの点を理解するために、用意されているとも言える。1:計算機以前のハナシそもそも、「コンピュータ」というのは、何者なのか?日本語で直訳すれば、「電子計算機」と訳される。要するに、何らかの計算をするための機械ということになる。コンピュータというものは、ある時に誰かが突然その原理を思いついて発明したものなのか?もちろん、答えはNOである。先人達が、必要に迫られて計算を行うための道具をつくろうとする過程から、徐々に生まれてきたものなのである。人類にとって、計算するための最初の道具として使われたものは、人間の指や石ころであったと言われている。今の常識から考えると、あまりにも単純なことではあるが、これでも立派な「計算道具」である。計算する、という意味の英語”calculate”の語源は、ラテン語の『小石』から来ていることからも、それはうかがい知ることができる。コンピュータの中ではすべての情報は0か1で表されており、そのようなデータを『デジタル』と読んでいるが、『デジタル(digital)』の語源も、ラテン語の『指』から来ている。小石や指で数を数える方法を、もう少し発展させてものが、東洋の「ソロバン」や西洋の「計算尺」である。「ソロバン」の起源は紀元前の中東で用いられていたという説があり、中国では14世紀ごろ、日本には室町時代には伝わっており、古い歴史のある計算道具である。こちらは、コマが「上がっているか」「下がっているか」のどちらかの状態しか見ないので、指や小石の延長で「デジタル」な計算道具である。「計算尺」は、目盛をつけた2本の定規を使って簡単に計算を行う道具で、1622年にイングランドの数学者・オートレッドが発明した。スコットランドの数学者・ネイピアが1617年に考案した「ネイピアの棒」を起源としており、数学の「対数」という考え方を使って、掛け算や割り算を簡単な足し算や引き算で置き換えようとしたモノ。定規のカーソルの位置で計算結果を求める「アナログ」の計算機であった点が特徴である。「関数電卓」が登場した1970年代頃までは理工学系の設計計算や測量の分野で使用されていた。*対数とは・・・16世紀末にジョン・ネイピアやヨスト・ビュルギらによって、考案され、便利な計算方法として広まったモノ。