21Sep
みなさん、こんにちは。
本日は、「アナログ・デジタル」の中の「補数表現と浮動小数点について」を書いていきます。
まず、「補数表現」について触れていきましょう。
はじめに前回までのブログにて、コンピュータは「0」と「1」を用いて、計算を行っていると伝えました。
コンピュータでは、マイナスの数を表現する時に「補数」というものを用いています。ここは計算も含めて問題にしやすい部分なので、覚えておきましょう。
補数表現ではビット数を決めた上で設定をする必要があります。
例えば4ビットでの値を指定する場合、0000(2)~1111(2)となり、取りうる値は0~15ですね。「5」を入力すると「0101(2)」となります。ここで「-5」の表現について考えます。「5+(-5)=0」ですから、2数を足してこの4桁が0となる数値を考えましょう。
既に「0101(2)」となっているので、「0101(2)」を引けばいいと考えるのが基本的な流れですが、今後触れる論理回路の仕組み上、引き算は処理が複雑で高速化には向いていません。
先の式でも書いた通り、あくまで足し算として考えるのです。
「0101(2)」に「1010(2)」を足すと「1111(2)」となります。さらに「0001(2)」を足すと、「10000(2)」になりますね。
答えからいうと、「1011(2)」というのが、2の補数表現での答えとなります。
※1の補数表現については、情報Ⅰの内容ではないので触れません。ご了承ください。
先ほどの内容を踏まえると、「10000(2)」だと「0」ではないじゃないかと思われるかもしれませんが、今回は4桁(4ビット)での表現としています。そのため、この桁上がりした「1」をコンピュータは取り扱わず、下4桁の「0000(2)」だけを見ます。そうすると、「0」となりますね。
この2の補数表現は、「0と1を反転させる」その後「1を加える」と補数を求めることができます。
次に「浮動小数点」について触れていきましょう。
浮動小数点は、コンピュータがより小さな数と大きな数を扱えるようにするためのものです。
例を挙げながら説明をしていきます。
例えば、16ビットで考えてみましょう。
そのまま16ビットで表現をする場合は、2の16乗から1引いた数が最大で表現できる数となるというのは、大丈夫でしょう。
2の16乗は、「65536」ですから、「65535」までの数を表現できることになります。
これでは圧倒的に表現できる範囲が少ないですね。
ここで、浮動小数点を導入してみましょう。
最初の1桁を「符号部」とします。これは正の数であれば「0」、負の数であれば「1」とします。
次に続く5桁を「指数部」とします。これが浮動小数点と呼ばれる重要な部分で、小数点の位置を示す部分となります。2の何乗かを表す部分です。
最後に残り10桁を「仮数部」とします。これは、最上位の位を1として、数を表現します。
…言葉だけですとややこしいですね。
浮動小数点を使わない場合の最大数は「65535」でしたね。そして、「65535」は「1111111111111111(2)」でしたね。
これを書き換えると、「1.111111111111111(2)」×「2の15乗」と言えるでしょう。
ただ今回は「仮数部」が10桁しかないので、10桁を取り出して、「1.111111111(2)」だけを引用します。
次に指数部を考えましょう。指数部を5桁に設定しているので、表せられる数は0~31までです。2の何乗かを示すので、今回であれば、2の15乗し、15桁分ずらしますので、「01111(2)」となります。
最初の符号部は正なので0とすると、
0 01111 1111 1111 11(2)と表すことができ、
これを数値に直すと「1111 1111 1100 0000(2)」となります。
これは、「65472」という数です。
元の数値と違うのは、仮数部の桁数が足りずに勝手に調整したからです。
今回は例示の都合上、「便利になった!」感覚は少ないと思いますが、イメージは持っていただけたと思います。
ここで着目してほしいことは、表現の幅が広がったということです。
ここで重要なのは、非常に小さい小数も桁数が大きい数でも表すことができるようになったことです。一方、仮数部で表現できる数を上回ると誤差が生じます。そのため、その点に留意して用いられます。
IEEE 754 単精度では、32ビットで表され、仮数部は23ビットになります。しかしながら、23ビットあっても仮数部が足りなくなることがあり、一般的に倍精度と呼ばれる64ビット、四倍精度と呼ばれる128ビットが用いられることもあります。
四倍精度では、指数部は15ビットで表現され、仮数部は112ビットにも及びます。
ここまで話をしてきましたが、実際の試験ではここまで細かくは聞かれないと思いますが、「補数を求める」、「32ビットの浮動小数点で表した時の変換」などは出題される可能性もあるかもしれません。
後日、練習問題もこのブログに掲載しますので、是非取り組んでみてください。
先程の例のように正しい数値がコンピュータの表現形式に収まらない場合に発生する差を「誤差」といいます。
2進数をある一定の桁で丸めて端数処理することを「丸め処理」といい、それによって起こる誤差を「丸め誤差」といいます。
本日はここまでです。
次回は「文字コードと論理回路」について触れていきます。