|
浮動小数点数
(イメージ)
浮動・・・浮いている,ふらふら←→固定小数点数
10進数120を考える。120を表現する。
・
・ |
・
・ |
| 1200 |
×10−1 |
| 120 |
×100 |
| 12 |
×101 |
| 1.2 |
×102 |
| 0.12 |
×103 |
・
・ |
・
・ |
のように,数字12が移動=浮動するイメージ。
そのうち,どのような表現にすればよいかは,決めればよいこと。どのような表現を用いるかは,問題中に必ず書かれている。
では,浮動小数点数ではどのように表記するのか?
| + |
0.12 |
×10 |
3 |
| ↑ |
↑ |
↑ |
↑ |
| 符号 |
仮数 |
底
(基数) |
指数 |
2進数の浮動小数点数では,底(基数)を2と決めておけば,符号,指数と仮数の情報だけ記憶しておけばよいことになる。
→大きな数値を決められたビット数内で表現するのに適している。(長所)
→けた落ち誤差が発生する場合がある(短所)・・・誤差で説明
一般的に,浮動小数点数の表記である。
(過去問題から憶える)
浮動小数点表示において,仮数部の絶対値の最上位けたが0以外になるように,けた合わせする操作を正規化という。(H11 秋 問5)
上の10進数120を正規化した場合
| + |
0.12 |
×10 |
3 |
| ↑ |
↑ |
↑ |
↑ |
| 符号 |
仮数 |
底
(基数) |
指数 |
(過去問題から憶える)
数値を16ビットの浮動小数点表示法で表現する。形式は図に示すとおりである。10進数0.375を正規化した表現はどれか。ここでの正規化は,仮数部の有効数字よりも上位の0がなくなるように指数部を調節する操作である。(H9 秋 問13)

S:仮数部の符号(正は0,負は1)
E:2のべき乗の指数部で,負数は2の補数
M:仮数部の絶対値
【解説】
10進数0.375を2進数に変換する。
【クレバー方式】
10進数→2進数 小数部とくれば 2を掛けろ
0.375×2=0.75
0.75 ×2=1.5
0.5 ×2=1.0
10進数0.375を2進数に基数変換すると,0.011。
浮動小数点数で表現すると,0.011×20。
ここでの正規化は,仮数部の有効数字よりも上位の0がなくなるように指数部を調節するとあるので,正規化すると0.11×2−1。
指数部の負数は2の補数で表現するとあるので,−1を2の補数で表す。
【クレバー方式】
1の補数とくれば 0と1を反転させる
2の補数とくれば 1の補数+1
| +1(4ビット) |
0001 |
| 1の補数 |
1110 |
| 2の補数 |
1111 |
よって,
(過去問題から憶える)
図に示す形式の24ビットの浮動小数点表示で,最大値を16進数で表わせ。(H10 春 問9)

【解説】
最大値ということは,
仮数部の符号 → 正 → 0
仮数部の絶対値 → すべて1
指数部 → 2補数で最大値 → 0111111
(参考)
2の補数表現
| 10進数 |
2進数 |
| 63 |
0111111 |
・
・ |
・
・ |
| 2 |
0000010 |
| 1 |
0000001 |
| 0 |
0000000 |
| −1 |
1111111 |
| −2 |
1111110 |
・
・ |
・
・ |
| −64 |
1000000 |
| 0 |
0111111 |
1111111111111111 |
【クレバー方式】
2進数→16進数とくれば 4ビットずつ区切れ
| 2進数 |
0011 |
1111 |
1111 |
1111 |
1111 |
1111 |
| 16進数 |
3 |
F |
F |
F |
F |
F |
指数部で,127を加えて表現するIEEE形式もある。
(−1)S×1.M×2(E−127)

S:符号部 → 正は0,負は1
E:指数部 → 127を加える
M:仮数部 → 1.Mになるように正規化
(問題から憶える)
10進数0.375をIEEE形式の浮動小数点で表せ。
10進数0.375を2進数に直すと0.011。
よって,0.011×20。正規化すると,1.1×2−2。
S:符号部 0。
M:仮数部 1.10〜0なので,10〜0。
E:指数部 −2+127=125。
10進数125を2進数に変換すると,01111101。
このように,指数部に+127をすることを下駄をはかすという。
(問題から憶える)
IEEE形式の浮動小数点
を10進数で表せ。
S:符号部 0なので,+。
M:仮数部 10〜0なので,1.1。
E:指数部 01111101なので,10進数に変換すると125。125−127=−2。
ここで,+127されているので,逆に−127をすることを下駄をぬぐという。
+1.1×2−2=+0.011×20。
0.011を10進数に変換すると0.375。
H11 秋 問5
H12 春 問8
H12 秋 問4
ブラウザの戻るボタンをご利用下さい!
|