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

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

締切り済みの質問

浮動小数点表示の考え方

平成22年春期 応用情報技術者試験 午前の問い2で出た問題についてです。

10進数の0.25を2進数の浮動小数点表示した場合、
どのような表示になるかという問いで分からない部分があります。

0.1×2^-1で表せるので、指数部は-1で仮数部は1となると言っているのですが、
どうして0.1の1が最上位ビットとして考えるのかわかりません。
解説動画みてもわかりませんでした。

10進数の1.25を2進数にすると、1×2^0+0×2^-1+1×2^-2ですが、
この場合は0.101×2^1として表して指数部は1で仮数部は101と考えるという事でしょうか?
なぜ1.01×2^0としてそのまま扱わないのか良くわかりません。
情報系の計算方法としては、小数点より前の数字を0にして有効数字をカウントするのが一般的という事でしょうか?
分かる方教えてください。

[問題文]
http://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2010h22_1/2010h22h_ap_am_qs.pdf

[答え解説]
https://www.youtube.com/watch?gl=JP&hl=ja&v=lqZBsBmLtpI

投稿日時 - 2015-01-10 19:16:27

QNo.8886752

暇なときに回答ください

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

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

回答(5)

ANo.5

たしかに、「仮数部の最上位桁が1」という文章だけでは、どこに最上位の1を持ってくるかが不明です。

しかし、その下の図に「小数点の位置」と書いてあります。
これは、
seeeefffffffffff
というビットパターンがあったら
0.fffffffffff * 2^eeee (s=0)
-0.fffffffffff * 2^eeee (s=1)
と解釈する、ということです。

「仮数部の最上位桁が1」というのは、
fffffffffff
のビットパターンが
1xxxxxxxxxx
という形になるようにする、というこです。



> なぜ1.01×2^0としてそのまま扱わないのか良くわかりません。

では、これを実際に符号化してみましょう

正なので s=0
0乗なので e=0000
 まではできますが
1.01から仮数部fへの変換ができません。
・fには整数部が無い
・小数部だけ見ると、最上位が0なので規格に合わない

ここで 「数値の一番上を1にしてそのまま」→ f=10100000000
としてしまうと、今度は読み出すときに
0.101 * 2^0
と解釈するので、元の値にはなりません。

投稿日時 - 2015-01-11 11:29:00

お礼

回答ありがとうございます。

>しかし、その下の図に「小数点の位置」と書いてあります。
やっと意味がわかりました。ありがとうございます。
この図示の「小数点の位置」という言葉が何を指しているのかわかってませんでした。
「小数点の位置」という図示をもって、仮数部最上位ビットを少数第一位と考えるという指示なのですね。

少数点の位置という矢印を、仮数部のビットのどこかを指すことで、
数値の指数表現時の有効数字部の表示方法を指示しているということですね?
この表現は浮動小数点表示を説明する際の一般的な表記なのでしょうか?

投稿日時 - 2015-01-11 15:23:49

ANo.4

>その最上位が1となるとはどういうことを指すのでしょうか?
>0.01の有効数字は1だけだと思うのですが、
>これを仮数部としてそのまま入れれば、最上位ビットは1だと思うのですが、どこが間違っているのでしょうか?

0.01 * 2^0
仮数部は01000000000
最上位桁は0なのでこの表現は×

0.1 * 2^-1
仮数部は10000000000
最上位桁は1なのでこの表現は○

1.0 * 2^-2
仮数部に1.に当たる部分は無いので入りません。

投稿日時 - 2015-01-11 08:20:14

お礼

回答ありがとうございます。

>仮数部に1.に当たる部分は無いので入りません。
No.4の方の回答を見てやっと理解できました。
0.01を仮数部の表現方法として指定した「少数の位置」という文言を正として考えるのですね。
その文言の意味が分かっておらず、指数表現は一般的に1の位から表現すると思っていたので、分からなくなってました。

投稿日時 - 2015-01-11 15:31:37

ANo.3

> 小数点より前の数字を0にして有効数字をカウントすると指定している部分はどこなのでしょうか?

問題文の図中で指数部と仮数部の間に小数点の位置が書いてあります。
そこを小数点にして仮数部の最上位けたが1になるようにすれば、小数点より前の数字は0になるしかありません。

投稿日時 - 2015-01-11 00:58:24

お礼

仮数部とは指数表示を行う際の有効数字ですよね?
その最上位が1となるとはどういうことを指すのでしょうか?
0.01の有効数字は1だけだと思うのですが、
これを仮数部としてそのまま入れれば、最上位ビットは1だと思うのですが、どこが間違っているのでしょうか?

1.0*2^-2という表現にならない理由がわかりません。

何か基本的な事を分かっていないのでしょうか?

投稿日時 - 2015-01-11 01:36:37

ANo.2

10.0 * 2^-3
1.0 * 2^-2
0.1 * 2^-1
0.01 * 2^0
0.001 * 2^1

全て、同じ値です。
これをそのまま指数、仮数に変換したら、全部バラバラのビットパターンになります。
それでは、こまりますよね?

ですから、同じ値は同じビットパターンになるように調整します。

この問題の場合は
0.1xxxxx * 2^n
という形にする、と決めたので、そのように調整します。
これが一般的かどうかは関係無く「こう決めた」ということが大事です。



一般かどうかだと、現在多くの場面で使われている IEEE754という規格では
1.xxxxx * 2^n
の形にします
http://ja.wikipedia.org/wiki/IEEE_754

だからと言って、この問題を1.xの形にしたら不正解になります

投稿日時 - 2015-01-10 23:04:48

お礼

回答ありがとうございます。

「この問題の場合0.1xxxxx*2^nという形にする、と決めた」
のはどこなんでしょう。
「仮数部の最上位けたが1となるよう」の部分でしょうか?
これだけだと1.xxxxxx*2^nにするという意味だと思ったのですが、ちがうのでしょうか?

何か根本的な部分を私が理解してないんでしょうか・・・

投稿日時 - 2015-01-10 23:31:25

ANo.1

> なぜ1.01×2^0としてそのまま扱わないのか良くわかりません。

小数点より前の数字を0にして有効数字をカウントするからです。
情報系の計算方法として一般的ということではなく,問題でそのように指定されているからそうするのです。

投稿日時 - 2015-01-10 21:37:43

お礼

回答ありがとうございます。

小数点より前の数字を0にして有効数字をカウントすると指定している部分はどこなのでしょうか?

投稿日時 - 2015-01-10 23:35:11

あなたにオススメの質問