【高校情報Ⅰ参考書・問題集・教科書/基本情報技術者】浮動小数点数/IEEE754
この浮動小数点数は私が基本情報技術者試験(20年前ですが・・)を受ける際に、理解に物凄く苦しんだ部分です。
教科書は1ページ程度で説明していますが、よっぽど理解力がある人じゃなないと厳しいかなというのが感想です。
教科書6ページ分くらいに拡張した内容で基礎からできるだけ細かく区切って動画解説しています。
浮動小数点数・IEEE754
情報Ⅰ共通テスト対策 書籍出版します!
【資料ダウンロード】
PDFの他、パワーポイント、学習指導案 等の原本も無料提供しています。
情報教育の底上げが目的なので、資料を修正して、学校・塾(営利目的含む)の授業等で利用して頂いて問題ありません。私への連絡不要ですが、利用する際には、YouTubeチャンネル・情報Ⅰ動画教科書・IT用語動画辞典を紹介してもらえると嬉しいです。
■PowerPoint
https://toppakou.com/info1/download/11_数値と文字の表現/3_浮動小数点/03_浮動小数点.pptx
■簡易学習指導案
https://toppakou.com/info1/download/11_数値と文字の表現/3_浮動小数点/【学習指導案】11_数値と文字の用言_02補数.docx
【文字おこし】
今日はコンピュータの小数の表し方である浮動小数点数について説明していきます。
ただ、ここは教科書の内容を読んでもほとんどの人は難しく感じる部分なので、基礎的な部分から説明していきます。
10進法から2進法の変換と2の補数は理解していることが前提で進めるので、まだ勉強していない人は概要欄に貼ってあるN進法変換と2の補数に関する動画を先に見てこの動画を見てください。
前提としてコンピュータの世界で扱える数は有限になります。
どこかで打ち切らないとコンピュータの扱える容量をオーバしてしまいます。
例えば小数点以下で扱える桁数を5桁として考えていきます。
0.0000012345という数字ががあった場合、
5桁目で区切るので数字があるのにもかかわらず0になってしまいます。
逆に整数部分が5桁まで可能とした場合に
1234500000 という数字があった場合にも0となってしまいます。
実際にはもっと大きな桁数を扱いますが、多くのゼロという数字を扱うために多くのビット数が必要になります。
この救世主となるのが仮数と基数と指数です。
中学でも習ったと思いますが
0.0000012345 は 小数点の位置を右にひとつづつずらすと
00.000012345 × 10のマイナス1乗と表されます。
もう一つ右にずらすと
000.00012345 ×10のマイナス2乗と表されます。
もう一つ右にずらすと
0000.0012345 ×10のマイナス3乗と表されます。
小数点の右に0が無くなるまでずらすと、
0.12345 × 10のマイナス5乗となります。
小数点以下5桁をとるとさきほどは0しか残りませんでしたが
このやり方だと12345という数字が取得できました。
部位の名称も復習します。
0.12345の部分を仮数、10の部分を基数、-5の部分を指数といいます。
このように仮数、基数、指数を用いることで 限られたビット数の中でより多くの桁数を保持することができます。
このように指数表記を用いて数値を扱う表現方法を浮動小数点数と言います。
今は理解しやすいように10進法で行いましたが、コンピュータは0と1の2進法で扱うので、今度は2進法で考えていきましょう。
0.0000010111というビット列で考えていきましょう。
二進法で表されるので基数は2となります。
小数点を一つ右にずらします。
00.00001011× 2のマイナス1乗となります。
もう一つ右にずらします。
000.0001011× 2のマイナス2乗となります。
小数点の右隣りに1が来るまで繰り返すと
0.1011× 2のマイナス5乗となります。
指数部と仮数部をそれぞれ何ビットに分けるかは、さまざまな規格で決定されていますが、
ここでは国際標準化団体のIEEE(アイトリプルイー)により規格化されている浮動小数点数の形式であるIEEE754を説明します。
32ビット、64ビット、128ビット形式がありますが、今回は32ビット形式で説明します。
プラスかマイナスかの符号をS 指数部をE 仮数部をMとすると
(―1)のS乗 × 1.M × E-127 乗で表されます。
正直分けわからないと思いますので、先ほど求めた0.1011×2のマイナス5乗の例で当てはめていきます。
まず符号は ―1 の0乗は 1 ―1の1乗はー1となります。
つまり、プラスを扱う場合は、0 マイナスを扱う場合は1とします。
今回はプラスなので0となります。
そして1.Mですが、この形に合わせるためには整数部の1桁目を1にしなくてはいけません。
暗黙的に整数部を1とすることで、0.で表すより1桁多く表すことができます。
先ほどは0.10111と整数部は0なので、小数点をもう一つ右にずらす必要があります。
1.0111 ×10のマイナス6乗となります。
よって
Mは0111になります。
そして、2のE―127乗の部分ですが
この127っていったい何なんだとおもわれるとおもいます。
これは、バイアスというもので、下駄をはかせるという意味になります。
があります。
たとえば今回はマイナス6乗なので
Eには121があてはまります。
実際の指数の範囲をー127~128の範囲とした場合、バイアスを用いることで0から255の正の数で表すことができます。 二進数表記で00000000から11111111となり、負の数つまり補数を意識しなくてよくなります。
いま求めた S M E をビット列で表します。
符号部Sは1ビット、指数部Eは8ビット、仮数部Mを23ビットで表します。
このビット列に順番に当てはめていきます。
符号部はプラスなので、0
指数部Eは121 ですが、これは10進法表記なので、2進法に変換する必要があります。
すだれ算を使って2で割っていくと
1111001 となります。
8ビット表記なので、右づめして空いた桁は0埋めします。
仮数部Mは小数点以下のぶぶんなので0111ですが左詰めにして、その他の桁は0埋めします。
ややこしく感じる方も多いと思いますが、有限なコンピュータ領域を有効利用するために偉い人が考えた手法になります。
試験で問われるレベルの応用問題を解いて行きましょう。
10進法であらわされる ―15.125 を IEEE754の形式で表してください。
そして、符号1ビット、指数部は8ビット、仮数部は23ビットの表の中身を埋めてください。
まず、2進法に変換する必要があるので整数部、小数部それぞれ2進法に変換します。
15の整数部はすだれ算を使います。2で割っていって1111となります。
0.125の小数部分は小数部が0になるまで2をかけていきます。
0.125×2は 0.250
0.250×2は 0.5
0.5×2は 1.0
それぞれの整数部の数を上からとって、001となります。
よって、10進法であらわされる ―15.125 は
2進法では―1111.001 となります。
IEEE754の形式にしていきましょう。
まず符号はマイナスなので Sは1となります。
整数部を1にするために小数点を左に3つずらします。
同時に左にずらした分 整合性を合わせるために 2の3乗をかけてあげます。
E-127の部分は ―127して3になる数なのでEは130となります。
ビット列の表に当てはめていきましょう。
符号Sはマイナスなので1
指数部のEは130は10進法なので2進法変換すると10000010で既に8ビットなので左に0埋めする必要はなくそのまま記入します。
仮数部は、111001でのこりは0埋めしてあげます。
かなり大変だと思いますが、パターンは決まっているので確実に得点源にできるように練習しましょう。
以上になります。
【参考サイト・参考文献】
★私の目標
「とある男が授業をしてみた」 の葉一さん
https://www.youtube.com/user/toaruotokohaichi
※Google社に招待頂いた、「YouTube教育クリエイターサミット2020」で
葉一さんと文部科学省・Google役員の対談セッションに感銘を受けて、高校情報講座スタートしています。
tkmium note(共通テスト対策・プログラミング・情報教育全般)
★情報関係基礎の過去問解説が充実しております!
https://tkmium.tech/
文部科学省 「情報Ⅰ」教員研修用教材
https://www.mext.go.jp/a_menu/shotou/zyouhou/detail/1416756.htm
詳細(情I703 高校情報I Python)|情報|高等学校 教科書・副教材|実教出版 (jikkyo.co.jp) 検定通過版
https://www.jikkyo.co.jp/book/detail/22023322
令和4年度新版教科書「情報Ⅰ」|高等学校 情報|日本文教出版 (nichibun-g.co.jp)検定通過版
https://www.nichibun-g.co.jp/textbooks/joho/2022_joho01_1/textbook/
その他、情報処理技術者試験(全レベル1~4)/IT企業15年勤務(システム技術部 部長)経験から培った知識を交えながら解説しています。
かわいいフリー素材集 いらすとや (irasutoya.com)
https://www.irasutoya.com/
この記事が気に入ったらサポートをしてみませんか?