浮動小数点
浮動小数点の表現形式
『栢木先生の基本情報技術者教室』を読んでいて、浮動小数点の表現形式もさっぱり分かりませんでした。
「仮数部が0.M(0.xxx……)になるように正規化します。」
まではいいのですが、例えばそれで、「0.11101×23」になるのはいいとして、次に、「仮数部(M)の最高位の桁から順に11101、残りのビットに 0 を入れます」。
元々、仮数部は、0.11101 のはずなのに、なんでいきなり小数点が無くなって、1110100 になるの?
理解している人には、間違いではない説明なのだけれど
「小数点以下の****を仮数部とします」「整数部が 0 になるように桁をずらすのではなく、0101.1010=1.011010 のように整数部が 1 になるように桁をずらして、整数部の 1 を省略した小数点以下を仮数部とする形式もあります」という他書の説明で理解して、もう一度栢木先生の本を見てみると、確かに、「仮数部が0.M」と書いてあって、M だけをデータに入れてあるのですから、記述自体はこれで間違いはありません。
でも、何の知識もない者に向かって、記号でしか表示されていないこれだけの説明では、いくら何でも不親切に過ぎるのではないでしょうか。いくら数字に疎い文系人間だって、一言「0. の部分は書かないで~」と説明してくれていれば、いらぬところで引っかかることはありません。
きちんと説明してくれている参考書は少ない
説明不足は、栢木先生の本だけではありません。『かんたん合格 基本情報技術者教科書』などは、有効桁数の説明でこそ、「位取りを示す 0 を除いた意味のある数字全体の桁数」とありますが、仮数部にどんな数字を入れるのかという説明自体がそもそもありません。
それで、「→浮動小数点の書き表し方を覚えておこう」と言ったって、どうやって覚えればいいのだか。
写真の本などは、きちんと説明してくれていますが、こういう面でも、マイナス表現同様、基本情報の参考書は、不十分な説明の分かりにくいものだらけです。
一つの参考書を読んで、どうしても理解できない場合には、本屋などで、他の参考書をちょっと参考にしてみるのもよい手です。
それで理解できることも結構あり、よさそうな参考書も自然と目につきます。
IEEE754形式の浮動小数点
午後の試験には、この形式で出ることが多いようです。
まず、1.**** × 2m の形になるように正規化します。
そして、1ビットの符号部に続く8ビットの指数部に、mに、バイアス値の127を足して、数値を記入します。バイアス値とは、指数にプラスして履かせる下駄のことです。
最後に、続く23ビットの仮数部に、****の部分を左から記入して終わりです。
実際の指数 | バイアス | 指数 | 2進数 |
---|---|---|---|
128 | 127 | 255 | 11111111 |
127 | 127 | 254 | 11111110 |
~ | |||
2 | 127 | 129 | 10000001 |
1 | 127 | 128 | 10000000 |
0 | 127 | 127 | 01111111 |
-1 | 127 | 126 | 01111110 |
~ | |||
-126 | 127 | 1 | 00000001 |
-127 | 127 | 0 | 00000000 |
こうすることで、マイナスの指数とプラスの指数とでも、符号を気にすることなく大小関係の比較が簡単にできます。
私などは、なんでバイアス値に、128ではなくて、127を足すんだろうと考えてしまいますが、なんでなんでしょう。プラスの指数よりも、マイナスの指数の方が分かりやすい方がよいからでしょうか。
それはともかく、上の表を見ると、指数部の8ビット目は、2の1乗以上なら1になっていることが分かります。0乗以下なら、0。
8ビット目が1の場合、7ビット目までの数字に1足した数が、指数の数になっています。1足すのを忘れないようにしないといけません。
例えば、指数部が、10000101 なら、0000101 → 5 なので、****×26
8ビット目が0ならば、7ビット目以下が全部1で、0乗。以降1減るごとに指数のマイナスの数も1減る計算になります。
上のような一覧表にしてみると、この関係が感覚的によくわかります。
説明は分かりにくいですが、それでも、平成23年のでも『栢木先生』の本には、IEEE754形式の上のような表まで載っているのはさすがです。自分で色々と調べて、内容が分かってしまえば、「ここまで詳しく説明してくれていて、なるほどそうなんだけどなあ」という所です。