• ベストアンサー

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

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

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

  • ベストアンサー
  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.4

#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 の形で数を表現しているということです。 ピンとくる来ないじゃなくて考えましょう。

その他の回答 (4)

  • alice_44
  • ベストアンサー率44% (2109/4759)
回答No.5

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

  • alice_44
  • ベストアンサー率44% (2109/4759)
回答No.3

科学的記数法をデジタル化したものが 不動小数点形式だが、これを実現するために、 負の指数を表す方法が必要になる。 計算機上で負数を表現する方法には、 符号ビット付き数、2の補数、バイアス付き数 などいろいろあり、それぞれに特徴がある。 2の補数は、加減算が簡単なので、 整数を実装する際に好まれる。 バイアス付き数は、大小比較が 同じビットパターンの符号なし数と同じなので、 上位ビットを仮数、下位ビットを指数にして、 指数をバイアス付き数で表しておけば、 不動小数点形式の大小比較が、整数の比較と 同じ計算になる…という利点がある。 (数学カテでは、カテ違いの質問かと思う。)

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.2

#1です、 ミスプリがありますので訂正してください。 (1+2^(-23))*2^(-127)=1.17549*10^(-38) ↓ (1+2^(-23))*2^(-126)=1.17549*10^(-38)

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.1

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で表します。 なお、ここでいう最小(絶対値)の数というのは、負の最小数ではないことを注意しておきます。

final2909
質問者

補足

理解力なくてすいません。 いまいちピンときません。 -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)となるのはなぜですか? ピンときません。 理解力なくてすいませんが、もしよければ再度教えてください。

関連するQ&A