人気マンガがだれでも無料♪電子コミック読み放題!!

IEEE754 浮動小数点で
(-1)~s×1.M ×2(E-127)
とありますが、2の指数部のE-127の理由がわかりません。
なぜ、127を引く必要があるのでしょうか?

また、仮数部の1.Mとする理由と併せて教えていただけると助かります。

※べき乗部の指数などの表記がうまく入力できない為、見づらくて申し訳ありません。

アドバイスよろしくお願いいたします。
また、参考サイトなどあれば、リンクお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

http://oshiete.goo.ne.jp/qa/2700742.html の私の過去の回答ANo.3

>仮数部の1.Mとする理由

0.M ではなく 1.M(いわゆる,隠れ"1"表現)を用いることで,仮数部の有効ビット数(精度)を1ビット長くすることができるから。
    • good
    • 0
この回答へのお礼

非常に参考になりました。
ありがとうございました。

お礼日時:2011/07/09 18:46
    • good
    • 0

http://ja.wikipedia.org/wiki/IEEE_754 の「32ビット単精度」の項を見てください。
指数部を127でバイアスしている理由も仮数部のけち表現についても書かれています。
なお、非正規化数の場合は仮数部が1.Mになりません。
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q浮動小数点

浮動小数点について勉強していますが、本を見てもよくわかりません。

「イクセス表記とは、本来8ビットで表現できる値は0~255であるのに対し、元の値に127を加算することにより、-127~128までの表現を可能としています。つまり、Eが0の場合は-127を、Eが127の場合は0を、Eがすべて1の場合は128を示しています。」(日経BP社)

とありましたが、
●127を加算したら、なぜ-127~128か?このマイナスはどうしてでてくるのか?

何か、例をあげて教えてもらえればうれしいです。
よろしくお願いします。

Aベストアンサー

>本来8ビットで表現できる値は0~255
------------------------
11111111 = +255
11111110 = +254
……
10000001 = +129
10000000 = +128
01111111 = +127
01111110 = +126
……
00000001 = +1
00000000 = 0
------------------------

>イクセス表現とは、元の値に127(01111111)を加算
------------------------
11111111 = +128 >Eがすべて1の場合は128を
11111110 = +127
……
10000001 = +2
10000000 = +1
01111111 = 0 >つまりEが127の場合は0を
01111110 = -1
……
00000001 = -126
00000000 = -127 >Eが0の場合は-127を、
------------------------

ということで,8ビット=256通りのパターンに
どの数値に対応づけているかが違うわけです。

符号なし固定小数点数では,
(11111111)~(00000000)に +255~0を対応。

イクセス127のゲタばき表現では,
(11111111)~(00000000)に +128~-127を対応。※

ちなみに,符号あり2の補数表現では,
(01111111)~(00000000)に +127~0,
(11111111)~(10000000)に -1~-128となります。

(※ celtisさんご紹介のURLに詳細がありますが,
IEEE 754 では指数部がオール1・オール0
の数を,特殊な数に対応づけています。)


>ビット反転+1よりも、127加算するほうが単純
------------------------
仮数に登場する負の数の表現には「2の補数」を使う意味があるけれど,
指数に登場する負の数には補数を使う意味がないということですよね。

指数の大きさを合わせた後の仮数同士の計算は,
(+5)+(-3)=(+2)
でよいから,「補数の加算,で減算を実現」できる2の補数の意味がある。

でも,(aの5乗)+(aの-3乗)のような異なる指数の計算では,
指数をそのまま加減算してもダメですからね。
------------------------

>本来8ビットで表現できる値は0~255
------------------------
11111111 = +255
11111110 = +254
……
10000001 = +129
10000000 = +128
01111111 = +127
01111110 = +126
……
00000001 = +1
00000000 = 0
------------------------

>イクセス表現とは、元の値に127(01111111)を加算
------------------------
11111111 = +128 >Eがすべて1の場合は128を
11111110 = +127
……
10000001 = +2
10000000 = +1
01111111 = 0 >つまりEが127の場合は0を
...続きを読む

Q10進数の14.5を浮動小数点(IEEE754形式)の2進数に変換するにはどうしたらよいでしょうか?

10進数の14.5を浮動小数点(IEEE754形式)の2進数に変換するにはどうしたらよいでしょうか?
10進数の-7.5を浮動小数点(IEEE754形式)の2進数に変換するにはどうしたらよいでしょうか?
計算方法を教えてください。

Aベストアンサー

14.5を符号と指数と仮数に分けます。
符号は正の数なので符号は0
次に14.5を符号無し2進数に変換すると
1110.1
小数点を左に移動させて1だけ残すと
1110.1=1.1101*2^3
仮数は23ビットで小数点より右側だけなので、足りない分を0でうめて
11010000000000000000000
指数の3を127でバイアスするので
3+127=130
これを2進数に直すと
10000010
全て合わせると、
01000001011010000000000000000000
で、32ビットの2進数に変換できました。
同じように、-7.5を変換すると、
符号は負の数なので1
-7.5を符号無し2進数に変換すると、
 111.1
=1.111*2^2
なので、仮数は
11100000000000000000000
指数の2を127でバイアスすると
2+127=129
これを2進数に直すと
10000001
全て合わせると
11000000111100000000000000000000
になります。
64ビットの場合は、指数のバイアスを127から1023にし、仮数の23ビットを52ビットまで増やせばOKです。

14.5を符号と指数と仮数に分けます。
符号は正の数なので符号は0
次に14.5を符号無し2進数に変換すると
1110.1
小数点を左に移動させて1だけ残すと
1110.1=1.1101*2^3
仮数は23ビットで小数点より右側だけなので、足りない分を0でうめて
11010000000000000000000
指数の3を127でバイアスするので
3+127=130
これを2進数に直すと
10000010
全て合わせると、
01000001011010000000000000000000
で、32ビットの2進数に変換できました。
同じように、-7.5を変換すると、
符号は負の数なので1
-7.5を...続きを読む

Q2進数のバイアス表現について

浮動小数の計算でバイアス表現ってのがありますが、これってなんなんですか?
いろんなサイトを見て回ったのですが理解できませんでした。
負の表現をなくすらしいですが、バイアスは一体なんのために必要なんですか?
もしバイアス表現なしだと仮定した場合どうなるんでしょうか?

指数に確か127を足すらしいですが、それってなぜ127なんですか?

分かりやすい回答お願いします。

Aベストアンサー

#1です。

「ピンときません」
ということですが、そういうことを言っているのではなくて、そうなっていると言っているのであって、そうかと思っていただくしかないのですよ。

「-0.1とか、0.00001234とかを表すことができないとありますが、っていうことは仮数部には小数はいれちゃいけないんですか?」

小数は入りますが、「1」より大きい小数になります。
「1+a*2^(-1)+b*2^(-2)+・・・(a,bは0か1)」の形だから、どうしても「1」よりは大きいでしょう。

実際に仮数部で表現されるのは、a,b,・・・ですが、「1」を足すので必ず「1」より大きくなる。「1」は仮数部にはないが、必ず「1」があるとして計算するので、「1」より小さい数は仮数部では表現されない。「1」より小さい小数は、10進数で表せば、
0.00001234=1.234*10^(-5)
の形の表現になるのです。

浮動小数点は2進数なので、0.00001234の仮数部は、
1001111 00000111 11100101
になっていて、10進数で表せば、
1*2^(-1)+0*0^(-2)+0*2^(-3)+1*2^(-4)+1*2^(-5)+・・・=0.6174284221
ですが、「1」を加えるので、1.6174284221になります。

指数部は、
1101110
になっていますが、これは10進で110です。
バイアス127をひくので、110-127=-17

それで、

1.617428422*2^(-17)=1.234*10^(-05)

になります。

「指数部の最小が1ということは実際にはn=0を抜いた値
-126~255までの数が一般に使える指数部の数でしょうか?」

そうです。

0もありますが、それは特別な扱いなので、
指数の計算で使えるのは、-126~255です。

「仮数部の最小が1+2^(-23)」

仮数部の0も特別な扱いなので、仮数部を「1+0」にする指数計算はできません。仮数部は単精度なら、23ビットなので、その最小ビットが1で最小で、2^(-23)です。

ちょっとややこしいですが、要するに、
1.###・・・×2^n
の形で数を表現しているということです。

ピンとくる来ないじゃなくて考えましょう。

#1です。

「ピンときません」
ということですが、そういうことを言っているのではなくて、そうなっていると言っているのであって、そうかと思っていただくしかないのですよ。

「-0.1とか、0.00001234とかを表すことができないとありますが、っていうことは仮数部には小数はいれちゃいけないんですか?」

小数は入りますが、「1」より大きい小数になります。
「1+a*2^(-1)+b*2^(-2)+・・・(a,bは0か1)」の形だから、どうしても「1」よりは大きいでしょう。

実際に仮数部で表現されるのは、a,b,・・・ですが、「...続きを読む


人気Q&Aランキング