dポイントプレゼントキャンペーン実施中!

指数部3bit、仮数部4bit、符号1bitの合計8bitの2進数の浮動小数点表示で、
(1)0.125+0.125+2.5
(2)2.5+0.125+0.125   (10進数)
を計算せよ。
という問題です。

0.125(10)は00000000(2)、2.5(10)は01000100(2)となることはわかるのですが、この二つの計算方法がよく理解できません。
どちらかが誤差が生じたりすると思うのですが、それがよくわからず困っています。
教えてください。

A 回答 (1件)

>指数部3bit、仮数部4bit、符号1bitの合計8bitの2進数の浮動小数点表示で、



これだけの情報では、ビットパターンが不明です。
・指数部に下駄を履かせるのか。履かせるならいくつか
・仮数部の正規化方法

>0.125(10)は00000000(2)

から、「指数部の下駄は3、仮数部は1以上2未満に正規化してその小数部を表現する」でしょうか。

指数の違う値の足し算の場合はまず仮数をシフトさせて位(指数)をそろえます。大きい方が2.5なので、指数の下駄を取って、省略されたかすの1の位を付け加えると、
指数: 1
仮数: 1.0100
十進で表現した値: (1+1/4)x2^1=2.5

0.125の指数を1にすると、
指数: 1
仮数: 0.0001
十進で表現した値: (0+1/16)x2^1=0.125

>(1)0.125+0.125+2.5
まず、0.125+0.125
指数: -3
仮数: 1.0000 + 1.0000 = 10.0000
正規化して、
指数: -2
仮数: 1.0000
これを2.5と足すために、指数が1となるように仮数部をシフト
指数: 1
仮数: 0.0010
これと2.5を足す
指数: 1
仮数: 0.0010 + 1.0100 = 1.0110
ビット表現に直すと、
01000110

>(2)2.5+0.125+0.125
最初に書いた0.125を指数1にした表現を使って2.5と0.125を足し算
指数: 1
仮数: 1.0100 + 0.0001 = 1.0101
さらに、0.125を足して、
指数: 1
仮数: 1.0101 + 0.0001 = 1.0110
ビット表現に直すと、(1)と同じく
01000110

どちらも誤差は生じません。

誤差が生じるのは、指数あわせの仮数部シフトをしたときに、仮数部の4bitで表されなかった場合です。
2.5 + 0.0625 だと、0.0625 を指数部1にしようとすると、
指数: 1
仮数: 0.00001
と、小数点以下が5bit必要なので表現できず、誤差が生じます。
    • good
    • 0
この回答へのお礼

とても詳しくて本当に助かりました!
ありがとうございました!

P.S.下駄、正規化等の詳細を書き込まず、すみませんでした・・・

お礼日時:2013/07/28 13:24

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