様々な学問/勉強課目をシミュレーションで解説!シミュレーター/ツール/ゲームで、いろんな学問を楽しく分かりやすく解説するサイトです!思考の改善や、効率化の話題も!
⇒ 本ブログの詳細/連絡先はコチラ!
学問系TOP AI/ChatGPT 数学 物理 統計学 コンピューター 経済学 Webツール
  1. ホーム
  2. 〇学問シミュレーター/改善・効率化
  3. 情報科学/コンピューター
  4. データ型
  5. 「浮動小数点」をシミュレーションで解説![コンピューターの原理基礎]
■注目記事一覧

高校数学 教科書用シミュレーターの制作に携わりました!!

本サイトの「サイコロ シミュレーター」が熊本の特別教育テレビ授業で使われました!

ページングをシミュレーターで体感しよう!

ストレージのRAID5構成をシミュレーターで理解しよう!

コンピューターの半理基礎:半加算器の原理をシミュレーターで理解しよう!

マルチタスクのCPUの動きをシミュレーターで見てみよう!

浮動小数点型の仕組みをシミュレーターで理解しよう!
 
全テーマ共通記事一覧

「浮動小数点」をシミュレーションで解説![コンピューターの原理基礎]

$$\newcommand\CB[1]{\textcolor{blue}{#1}} \newcommand\CR[1]{\textcolor{red}{#1}} \newcommand\CG[1]{\textcolor{magenta}{#1}}$$

コンピューターは2進数の世界で動いています。2進数は1001101101みたいな感じで0と1の羅列となってます。

前回、簡易的な小数点の表現方法の「固定小数点方式」について解説しました。今回はその弱点を補う「浮動小数点方式」について解説します!

「浮動小数点」をシミュレーションで解説![コンピューターの原理基礎]

おさらい:「固定小数点」

コンピューターは↓のように0 or 1が入る箱(bit)を組み合わせて、それによって数値表現をします。

↓は1バイト(8bit)で、数値としては0~255の256パターンを表現できます!

これに対して固定小数点方式は↓のように小数点の位置をどこか固定的にズラします。↓の場合は1つ左にズラした時の図です。

この場合、2進数で「11.1」と評価されます。
また、2進数の小数は↓のように2の累乗の逆数で評価されるので、「2進数の11.1 ⇒ 10進数の3.5」と評価できるんです!

1桁目: \(\large{2^{-1} = \frac{1}{2}}\)
2桁目: \(\large{2^{-2} = \frac{1}{4}}\)
3桁目: \(\large{2^{-3} = \frac{1}{8}}\)

ただし、固定的に小数点の位置を決めるため、「整数部分が足りなくなる」「小数部分が足りなくなる」ということが起きてしまうのです><

浮動小数点 = 小数点の位置を指定できる方式

↑のような固定小数点方式の問題に対して、浮動小数点は↓のような解決法をとります!

浮動小数点 = 「評価する数字」とは別に「どこに小数点を置くか」を指定する方式

つまり、↓のような形のデータにして、「どこに小数点を置くか」も指定できるようにしたわけです(プラスして先頭はプラスかマイナスかを示せるようになっています。

具体的な浮動小数点(2バイトの例)

それでは、具体的に浮動小数点による表す数値の決まり方と用語を見ていきます。今回は簡単のために2バイトの浮動小数点での例を見ていきます(4バイト、8バイトもありますが長くなるだけで基本的な仕組みは同じです)

浮動小数点は「符号ビット」「指数部」「仮数部」で構成される

↓が具体的な2バイトの浮動小数点の形式です。

浮動小数点は3つの場所に分かれています

符号bit(1bit) 符号がプラスの場合は0、マイナスの場合は1
指数部(5bit) 小数点の位置を示す
仮数部(10bit) 実際に2進数で評価される値

符号bit

これは単純にプラスなら0、マイナスなら1とするだけです。

指数部

これは前回の固定小数点で説明していた「小数点をズラす操作」になります。ただし、決めの関係で00000と11111は使えないです(無限や0などの特殊状態を示すのに使用)。

そのため、0001~11110までの30通りで指数を示します。このときに「01111を基準点とし、↓のように仮数部の一番左にする」という決めになっています(右端基準ではない)

そして、01111以下であれば小数点を左にズラし、01111以上であれば小数点を右にズラすようにします。

↓指数部10001の例。「10001 – 01111 = 十進数で2」で、基準点から右に2つズレた位置に小数点が置かれます。

仮数部

仮数部で実際に評価される2進数を指定します。この数値は↑で定義した指数部だけズラして評価されます。

ただし、↓のような左が0で空いている状態で表現したら、もったいないですよね。だったら指数をずらして、↓の11を左にもっていったほうがより細かい数字も表現できてよいはずです。

そこで、仮数部は「一番左側に1があるとこまでズラして置く」というルールを設けて配置することになっています。

しかし!このルールなら「一番左は1しか来ないので、自明じゃないか!」ということになります。どうせ1なので、一番左のbitは無駄になります。

そこで、浮動小数では、さらにもう一段左にズラして「仮数部の左に1があるものとみなす」という前提を設けます!↓のように仮数部には数値がなくても、1があること前提になっているんです!これを「ケチ表現」といいます。

ケチ表現 = 1bit節約のために、仮数部の左に1があること前提で仮数部を評価する手法

↑のように、仮数部のすぐ左に幽霊のような1がある」状態になるんです。ちょっと不思議ですが、このほうがbitを節約して細かな値を表現できるようになるんですねー

総合的に浮動小数点で表される数値

ややこしいですが、結局、↑の「符号ビット」「指数部」「仮数部」の3つで表される数値は↓のような数式で表現できます。

浮動小数点で表現される数値

\(表現される数値 = (-1)^{符号bit}×2^{指数部 – 15}×1.仮数部\)

ちょっと難しいですよね。ということで、シミュレーターで実際の動きを確認してみましょう!

「浮動小数点」シミュレーターで理解を深めよう!

↑の解説だと難しいところありますが、、、実際手を動かして実験してみると「符号ビット」「指数部」「仮数部」が理解出来てくると思います!

シミュレーターの説明
  • 「符号ビット」「指数部」「仮数部」の3つが指定できます
  • 符号bitは0か1で選べます
  • 指数部は仮数部左に小数点がくるときを基準点0として、10進数で指定可能です(シミュレーター上は実際に埋め込まれる2進数で表示されます)
  • 仮数部は16進数で指定できて000~3FFまでの数値を指定可能です(10bitで表現できる範囲)
  • ケチ表現のため、「仮数部の左に半透明な1が固定的に置かれる」前提になってます。注意しましょう!

符号bit

指数部
0
仮数部
007

浮動小数点シミュレーターの考察

大きな整数から小さな小数まで細かく表現が可能

固定小数点の場合、小数点の位置が固定されるため、小数か整数どちらかしか細かく表現できませんでした。

しかし、浮動小数点は指数部で自由にそこを操れるので、、、↓のように大きな数や

↓のような細かい数も表現できます。
↓必ず左端に1がくるため0がつくれない

2バイトなので微妙ですが、4バイトや8バイトとになるともっと巨大な数、もっと小さな数が表現可能です!

0は表現できないので、特殊記号を使う

↑の説明の通り、ケチ表現のために「仮数部の左には1がくる」という前提になっています。そのため、どう頑張っても0は表現できません!

↓必ず左端に1がくるため0がつくれない

このため仮数部=0などとして、特殊な状態として表現する必要があるのです!
 

まとめ

  • 「浮動小数点 = 小数点の位置を指定できる方式」
  • 指数部の指定に一定のルールがあり、ケチ表現があってややこしいが、基本の考え方は固定小数点の拡張版と考えられる

 

[関連記事] コンピューターでの小数の表し方
2.浮動小数点(本記事)

 


⇒「データ型」カテゴリ記事一覧

その他関連カテゴリ




お気軽にコメントお願いします!

Your email address will not be published. Required fields are marked *




記事カテゴリ