コンピュータの2つの小数表現の方法について

ITの世界では日々新しい技術が開発されるので、常に学び続けなければなりません。それに従い、学んだ技術が使えなくなることもあるのです。

ただし、コンピュータサイエンスの基礎に関しては、コンピュータを利用して技術が開発される限り、廃れるものではないので理解しておくと長期的に活用できるものだと思っています。

今回はコンピュータが数を表す2つの方法というテーマでお送りします。

そして、今回はこちらの本の内容を参考にアウトプットしています。

コンピュータが数を表す2つの方法

[kanren postid=”3968]

以前、こちらの記事にてコンピュータは0と1の数字の組み合わせによって情報を表現していると言うことをお伝えしました。

今回は、その0と1の数を使って表す2つの方法についてお伝えしていきます。

早速ですが、この2つの方法は、小数点を含む数の表し方となっており

[box class=”simple_box” title=”小数点を含む数の表し方の種類”]
  1. 固定小数点数
  2. 浮動小数点数
[/box]

以上2種類の方法となります。

IMG 1590 

それぞれ簡単に説明すると上図のような意味があります。

固定小数点は、5桁を整数部分にして、残りの3桁を小数扱いにしようと決めることができるので、一言で言うとわかりやすく処理も早い方法です。

しかし、この方法だと例えば「0.00000000002」とか 「1200000000000000」みたいな数値の中身はほとんど0しかないにもかかわらず、桁数だけはやたらと必要な数字になります。

実際これらを8ビットで表せるかと言えば、桁数が入りきらないので不可能です。

そこで登場するのが浮動小数点。

浮動小数点は「符号 仮数✖️基数指数」の形式で格納することにより、小さな数や大きな数を限られたビット数でも表現してくれます。

以上のことから、コンピュータの中では、固定小数点数で整数を表し、浮動小数点数で実数(小数を含む数)を表すといわれているのですが、現段階ではよくわからないと思うので、それぞれ詳しく理解していきます。

固定小数点数

まず、固定小数点数は「ビット列のどの位置に小数点があるか」を暗黙的了解として扱う表現方法です。

IMG 1597

 

例えば、8桁のビット列で頭2ビットを整数としてみたり、頭5ビットを整数にするとしてみると、整数部と小数部がわかれることがわかります。

このことに納得してもらった上で、例えば、1番最下位のビットの右側を小数点とすると小数部分に割くビット数は0となり、整数だけを扱うこととなるのです。

以上のことから、固定小数点数は整数部を表すものだといわれています。

 

IMG 1594

 

こちらは、8ビットの固定小数点数であらわせる整数の範囲になります。

浮動小数点数

浮動小数点数は、指数表記を用いて数値を扱う表現方法です。

 

IMG 1596

 

指数表記の記数などの固定部分を覚える必要はないので、コンピュータは浮動小数点として残りの変更可能な部分である(符号、仮数、指数)の値をビットに割り当てて、数を表現します。

 

IMG 1599

 

この浮動小数点の指数表記の形式によって、小さな数や大きな数の実数を(少数を含む数)を表すことができます。

浮動小数点数の正規化

まず、正規化とは一定のルールに基づいて変形し利用しやすくすることです。

今回紹介する浮動小数点数の正規化がなぜ必要かというと、限られたビット数の中で表現する必要なケースがあるからです。

 

IMG 1601

 

例えば、5桁の枠にはめ込んで保管しなきゃいけないとします。

図にある1と2は同じ数字ですが、指数表記によって異なっていて、今回、5桁の枠にはめこむ目的に対しては1が達成することになります。

指数と仮数の組み合わせにはいろんなパターンがありどれも間違いではありませんが、このようにルールが決まっているとなんでもいいというわけにはいかないというわけです。

 

IMG 1600

 

したがって、この正規化によって有効な桁数を多く取ることができると、その分誤差が減るので、精度の高い計算を行うことができます。

よく使われる浮動小数点数形式

先ほど紹介したように浮動小数点数の形式は基本的にはきまっています。

ただし、浮動小数点数形式の種類によってはどこに何ビット割り当てるか、とかどう正規化するかとか細かく違いがあります。

ここでは

[box class=”simple_box” title=”浮動小数点形式の種類”]
  1. 32ビット形式
  2. IEE754の形式
[/box]

を紹介します。

 

 

32ビット形式

1つ目はシンプルな浮動小数点形式になります。

全体は32ビットで構成されていて、指数部の値が負の場合は2の補数をつかって表現します。

仮数部には、0.Mと正規化したMの部分が入ります。

 

IMG 1603

 

この形式を用いて例えば10進数の0.375を表すとどうなるか見てみましょう。

 

IMG 1604

 

以上のような流れで浮動小数点形式の32ビット形式は表現します。

10進数から2進数に変換するときに用いる桁の重みの表について復習したい方は以下の記事をどうぞ。

[kanren postid= “3937” ]

 

 

IEEE754の形式

もう1つは、IEEE(米国電子電気技術者協会)により規格化された、IEEE754という浮動小数点数の形式を紹介します。

こちらは、32ビットや64ビット、128ビットの形式などがありますがその中の32ビットを例として取り上げます。

 

IMG 1605

 

全体を32ビットで構成するのは、先ほど紹介した32ビット形式と同じですが、ビット数の内訳や指数部の表し方、正規化の方法などが違っています。

以下に、新しくここで知ることとなった仮数部の工夫とバイアスの説明について記載しています。

 

IMG 1606

 

この形式を用いて先ほどの例と同じく10進数の0.375を表すとどうなるか見てみましょう。

 

 

IEE754の方式では、指数の値をバイアス表現することと、仮数部には1.Mを正規化したMの部分が入るという2点を押さえておく必要があります。

以上のような流れで浮動小数点形式のIEE754の32ビットの形式は表現することを理解しておきましょう。

最後に

本日はコンピュータの2つの小数表現の方法についてというテーマでお送りしました。

冒頭にも紹介しましたが、今回の内容に関しては以下の本で学ばせてもらったことを参考にアウトプットさせていただいています。

 

 

こちらは基本情報技術者試験の参考書となっていますが、ITサイエンスの基礎を学んでいく上でおすすめの本です。

Amazon内の評価も高く、他にも参考書はありますが、文章メインではなくイラストが多用されているので、特に初学者の方にはとっつきやすく理解しやすいと思います。

ぼくもこの本にかなりお世話になっていて、おすすめできる書籍となっているので、気になる方はぜひ手にとってみてください。

 

それでは本日もありがとうございました。

 

 

今日も頑張ります。

 

[kanren postid=”3968,3894,3924,3937,3951,4003,4041″]
上部へスクロール