• ベストアンサー

浮動小数点表示 加算方法 IEEE

指数部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)となることはわかるのですが、この二つの計算方法がよく理解できません。 どちらかが誤差が生じたりすると思うのですが、それがよくわからず困っています。 教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4903/10364)
回答No.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必要なので表現できず、誤差が生じます。

weissewine
質問者

お礼

とても詳しくて本当に助かりました! ありがとうございました! P.S.下駄、正規化等の詳細を書き込まず、すみませんでした・・・

すると、全ての回答が全文表示されます。

関連するQ&A