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

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

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

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

A 回答 (5件)

#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
の形で数を表現しているということです。

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

バイアス127なら、指数部は -127~128 では?

    • good
    • 3

科学的記数法をデジタル化したものが


不動小数点形式だが、これを実現するために、
負の指数を表す方法が必要になる。

計算機上で負数を表現する方法には、
符号ビット付き数、2の補数、バイアス付き数
などいろいろあり、それぞれに特徴がある。

2の補数は、加減算が簡単なので、
整数を実装する際に好まれる。

バイアス付き数は、大小比較が
同じビットパターンの符号なし数と同じなので、
上位ビットを仮数、下位ビットを指数にして、
指数をバイアス付き数で表しておけば、
不動小数点形式の大小比較が、整数の比較と
同じ計算になる…という利点がある。

(数学カテでは、カテ違いの質問かと思う。)
    • good
    • 1

#1です、



ミスプリがありますので訂正してください。

(1+2^(-23))*2^(-127)=1.17549*10^(-38)

(1+2^(-23))*2^(-126)=1.17549*10^(-38)
    • good
    • 0

IEEE 754 形式の単精度実数の浮動小数点数の表現では、


符号部 1 ビット ・ 指数部 8 ビット ・ 仮数部 23 ビット
を使います。
ここで、指数部は127のバイアスをかけて表現します。

指数部は、2^nのnを表すビット列で、符号なし整数で表します。もし、バイアスがなければ、n=0~255まで表現できることになります。
仮数部は、1+a*2^(-1)+b*2^(-2)+・・・(a,bは0か1)で表すようになっているので、仮数部の最小の数は1です。これに指数部をかけて数を表すのだから、バイアスのない場合に表わせる数の最小(絶対値)は、1*2^0=1でこれより小さい数は表せません。
要するに、-0.1とか、0.00001234とかを表すことができないということです。

バイアスをかけて、
n=(指数部の表示)-127
と、しておけば、n=-127~128まで表現でるはずですが、IEEEでは、指数部や仮数部が0の場合は特別な意味があるので、指数部の最小1と仮数部の最小1+2^(-23)で、
表せる最小(絶対値)の数、(1+2^(-23))*2^(-127)=1.17549*10^(-38)
まで表せることになります。なお、0は指数部、仮数部ともに0で表します。

なお、ここでいう最小(絶対値)の数というのは、負の最小数ではないことを注意しておきます。

この回答への補足

理解力なくてすいません。
いまいちピンときません。

-0.1とか、0.00001234とかを表すことができないとありますが、っていうことは仮数部には小数はいれちゃいけないんですか?
n=(指数部の表示)-127でn=-127~255まで表現できるということは、
指数部の表示に0を代入してn=-127
指数部の表示に255を代入してn=128
ってことでn=-127~255までってことですか?

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

それから仮数部の最小が1+2^(-23)となるのはなぜですか?

ピンときません。

理解力なくてすいませんが、もしよければ再度教えてください。

補足日時:2011/06/26 13:30
    • good
    • 0

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