プロが教えるわが家の防犯対策術!

再質問で畏れ入ります。


数値を32ビット浮動小数点形式で表す。指数部は2を基数とし、負数は2の補数で表現する。10進数0.375をこの2を基数とした浮動小数点形式で正規化したものはどれか。ただし結果は16進数で表現する。

答え:7FC00000


という問題です。
まず0.375を2進数に
0.011
正規化
0.11 * 2^-1
指数部-1を2進数で求める
-0000 0001 ->1111 1111
仮数部符号は正の数なので0
0111 1111 ???? ???? ???? ???? ???? ????

と・・・
ここの部分からわかりません・・・
(なぜか手持ちの参考書には省略してあり・・・)
7Fの部分はこれで間違いないでしょうか?
またそのあとのC00000
はどうやって導くのか教えてください。

お願いいたします

A 回答 (2件)

まず、0.375を2進表現すると


0.011
になります。

言いかえれば、
0.011 * 2の0乗
です。

この値は
0.11 * 2の-1乗
に等しくなります。

ここで、浮動小数点の形式を「符号1ビット、指数7ビット、仮数24ビット」と仮定すると、

符号:正の数なので 0
指数:2の-1乗。-1の2の補数 1111111
仮数:0.11の「0.」を取り除き、下位ビットに0を埋め 110000000000000000000000
このようになります。これを並べると
0 1111111 110000000000000000000000
となり、16進数表現で
7FC00000
となります。

これを
0.011 * 2の0乗
のまま正規化せずに浮動小数点形式にしてしまうと

符号:正の数なので 0
指数:2の0乗。0は 0000000
仮数:0.011の「0.」を取り除き、下位ビットに0を埋め 011000000000000000000000
このようになります。これを並べると
0 0000000 011000000000000000000000
となってしまいますが、仮数部の上位に0がある分だけ仮数部の下位の桁が減り、精度が落ちてしまいます。

そこで、仮数部を2倍し(つまり上位の0を取り除いて左に1ビットシフトし)、仮数部を2倍した代わりに指数部を1つ減らします。

つまり「0.375×1(0.375×2の0乗)では無駄があるので、0.75×0.5(0.75×2の-1乗)にしよう」と、正規化を行うのです。

なお、浮動小数点形式を規定したIEEE754では、上記の形式と異なる形式を用いる事により、更に1ビット分精度を上げています。仮数部を正規化する事により仮数部の最上位ビットが常に1になる事を利用し、その最上位の1を取り除いて仮数部の桁を増やしています。
    • good
    • 0
この回答へのお礼

>仮数部の上位に0がある分だけ仮数部の下位の桁が減り、精度が落ちてしまいます。


ありがとうございます。
正規化の意味合いまで教えていただいて、とても勉強になりました。意味までわかっていたほうが覚えやすいですね!

>仮数:0.11の「0.」を取り除き、下位ビットに0を埋め 110000000000000000000000
このようになります。これを並べると
0 1111111 110000000000000000000000


とてもご丁寧にありがたいです。
実は購入した参考書が
突然
「C00000」
となってしまっていて、1100だからCとは書いていないのです。
このCは何処からきたんだ・・・と頭を抱えておりました。

仮数部は0.11だから0011では・・・と思い込み
どんどんわからなくなっていました。

とても助かりました

ありがとうございました!!

お礼日時:2004/02/26 20:40

7Fまではazicyaさんの方法で間違いありません。



仮数部の求め方ですが、単に正規化したものの
小数点以下をそのまま上位ビットから並べて、
余ったところは0で埋めるだけです。

この問題の場合は、正規化すると 0.11 * 2^(-1)
ですから、0.11の11を上位ビットにおいて、
残りは全部0になります。

つまり、質問の
???? ???? ???? ???? ???? ????

1100 0000 0000 0000 0000 0000
になるわけです。
    • good
    • 0
この回答へのお礼

>0.11の11を上位ビットにおいて

わかりました!!
すっきりいたしました。
どうもこの部分の説明がちゃんと書いていなくて
混乱してしまいました!

ありがとうございました!

お礼日時:2004/02/26 20:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!