プロが教える店舗&オフィスのセキュリティ対策術

【問題】
4バイト(最上位ビットから1ビットの符号ビット、7ビットの指数部、24ビットの仮数部からなる)の数値で表現する浮動小数点を考える
。この形式で表現される浮動小数点数の絶対値は、
16^n * (f1 / 16 + f2 / 16^2 + f3 / 16^3 + f4 / 16^4 + f5 / 16^5 + f3 / 16^3)
となる。ただし、nの負数は2の補数で表すものとする。また、fi(i=1,2,3...6)は、0から15までの数値である。例えば、10進数の16.5は
16.5=16^2*(1/16+0/16^2+8/16^3)…(1)
であるから、浮動小数点形式では16進数表示で02108000・・・(2)
となり、
-16.5は82108000・・・(3)
となる。

分からないのは、問題文中の「例えば~」以降で(1)、(2)、(3)がどうしてそのように表されるのか理解できません。分かる方詳細に教えてください。

A 回答 (3件)

指数関数は y=m*16^x となります。


mが仮数部、xが指数部。ここまではいいですか?
(ここが分からないと数学の教科書を読み返してもらうことに)

次にここが最大の山場なのですが、
仮数部の値は1/16≦m<1 の範囲内になるように調整します。
つまりその状態が(1)です。

上の式に当てはめれば y=m*16^2 となっています。
指数部は2ですね。マイナスは符号ビットが1が立ちます。
すると先頭8ビットは次のようになります。

 1     0000010
符号ビット   指数部2

これを合わせると10000010 で最初の82が完成です。
+の場合は符号ビットが0なので02になるわけです。

仮数部は1/16の倍数、つまり16で割っています。
すると余りは必ず 0~15 の範囲に来ます。
ここもよく工夫されているところで 4ビットで1つの桁を表せます。

(1)でも仮数部の並びは 1、0、8 となってますから
4ビット単位で配置していくと108となります。
あとは辻褄を合わせるために後ろに0を埋めていきます。

これで完成になります。

この回答への補足

>>次にここが最大の山場なのですが、
仮数部の値は1/16≦m<1 の範囲内になるように調整します。
つまりその状態が(1)です。

(1)の導出の仕方はないのですか?
自力で見つけるしかないのでしょうか?

補足日時:2007/04/18 18:25
    • good
    • 0

>(1)の導出の仕方はないのですか?


ええっとこれはそれほど難しくないのですが、
まずは10進数を16進数に変換できないことには始まりません。

16.5は 16進数で10.8になります。
ここの変換はさすがに自分で計算するよりない。

次に1/16<x<=1 ですが、10.8 を小数点以下にすればいいです。
すると2回右にずらせば0.108となります。
この2回右にずらした状態が 16^2 で割った値になっています。
よって指数部は 16^2 が来ます。

このずらすという行為はシフトとよばれています。
右シフトや左シフトというものを会得されるとより考察が深まります。
    • good
    • 0
この回答へのお礼

よく分かりました。
詳細な回答ありがとうございます。

お礼日時:2007/04/19 10:48

16.5 = 0.165*10^2とします。


ここで符号ビットと指数部が決まります。0x00(符号)+0x02(指数)=0x02です。
0.165を1/16で割ると2.75です。1/16の桁が2=0x2になります。
0.165-(2/16)=0.04が余ります。
0.04を1/256で割ると10.24です。1/256の桁が10=0xAになります。
0.04-(10/256)=0.0009375を同様に1/4096で割ると....

022A....となるのではないでしょうか?
    • good
    • 0

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