みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

投稿日時 - 2013-07-28 12:13:54

QNo.8195376

すぐに回答ほしいです

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

>指数部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必要なので表現できず、誤差が生じます。

投稿日時 - 2013-07-28 12:51:47

お礼

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

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

投稿日時 - 2013-07-28 13:24:50

ANo.1

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問