• ベストアンサー

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

  • 16ビット浮動小数点数の表現方法について

    学校の課題において、ある数を2進数で表現し、さらにその数を16ビット浮動小数点数で表しなさい。またそのとき生じる誤差の名称を記しなさい、という課題がでており取り組んでいるのですが、ネットで調べていても計算方法が理解できず行き詰っております。どなたか計算方法の手助けをお願いできないでしょうか。 与えられた条件 符号ビット:1ビット(0:正、1:負) 指数部:4ビット 仮数部:11ビット 16ビット浮動小数点数で表す数 10011100011000011 です。計算方法を理解したいので、なるべく詳しくお願いいたします。 誤差の名称もできればご教授願います。

  • 浮動小数点表現の指数部は十進数からどうやってだすの?

    浮動小数点表現の指数部は十進数からどうやってだすの?

  • 浮動小数点の表現(基本情報)

    数値を16ビットの浮動小数点表示法で表現する。形式は図に示すとおりである。10進数0.375を正規化した表現はどれか。ここでの正規化は,仮数部の有効数字よりも上位の0がなくなるように指数部を調節する操作である。(H9 秋 問13) S(1ビット):仮数部の符号(正は0,負は1) E(4ビット):2のべき乗の指数部で,負数は2の補数 M(11ビット):仮数部の絶対値 【参考にしたサイト】 http://www.jtw.zaq.ne.jp/kayakaya/new/kihon/text/fudo.htm 【質問】 Eは、負数は2の補数とありますが、Eの先頭1ビットは符号を表すのでしょうか? 手持ちの参考書にも同じような説明があったのですが、先頭が符号なのか分かりませんでした。IEEE754では、指数にE-127を使っているので、非負、負の表現は出来る事は分かりました。しかし、上記の場合は、非負、負の判断はEにも符号ビットがないと出来ないように思い質問しました。回答宜しくお願い致します。

  • 浮動小数点数の表現について

    浮動小数点数の表現で、このIEEEともう一つの方式の違いは何でしょうか? 参考書にこう載っていましたが、よく理解できませんでした。 違いを教えてください。 10進数の28をIEEE仕様の浮動小数点数で表示します。 仮数部を2進数に (28)10 → (11100)2 仮数部の正規化 (11100)2 ×2 0 →(1.1100)2 ×2 4 指数部をイクセス表記に2 4 → 2 131 10進数の28をもう一つの仕様の浮動小数点数で表示します。 仮数部を16進数に (28)10 → (1C)16 仮数部の正規化 (1C)16×16 0 → (0.1C)16 ×16 2

  • 浮動小数点表現の指数部は十進法からどうやってだすの?の

    浮動小数点表現の指数部は十進法からどうやってだすの?の

  • 浮動小数点表現

    2^{24}を32bit整数表現及び32bit(単精度)浮動小数点表現で表せ。 結果は16進数で示せ。 符号ビット:MSB 指数部n:7ビット 仮数部:24ビット という問題があるのですが、 解いてみたものの、答えもないのであっているのか分かりません。 以下の答えで合っているでしょうか? また、合っていなかったら、どのように解くのか教えていただけませんか? 整数表現 0100 0000H 浮動小数点 0100 1000 0100 0000 0000 0000 0000 0000

  • 浮動小数点について

    当方、浮動小数点を勉強しているのですが、 テキストの解説を読んでも理解が出来ません。 正規化とか指数と仮数の意味が分かりません。 そこで質問なのですが、浮動小数点の計算方法を教えて下さい。 IEEE形式の浮動小数点も教えて頂けると助かります。 また、下記の問題について解説して下さい。 数値を16ビットの浮動小数点表示法で表現する。 形式は図に示す通りである。10進数0.375を正規化した表現は、どれか。 ここでの正規化は、仮数部の有効数字よりも上位の0が無くなるように、 指数部を調節する操作である。 (図は添付します) 何故「E」の値が「1111」になるのでしょうか。 お手数ですが、ご教授お願いします。 尚、特に分かり易いホームページがあったら、 そのURLを記載して頂いても結構です。 以上、よろしくお願い致します。

  • 32ビットの浮動小数点について

    32ビットの浮動小数点(符号1ビット指数8ビット仮数23ビット)で非正規表現をもとめるには例えば(符号0指数0仮数1.01101)はどういう計算をすれば良いのでしょうか?

  • 情報科学について!進数変換の問題です。

    (0.01)10を全体が2バイトで基数は8、仮数部は12bits、指数部は3bitsでかさあげ表現の浮動小数点表示を用いて2進数表示すると( )2となる。 という問題で答えが0010101000111101なのですがどうしてそうなるのかわかりませ。 詳しく解説してもらえないでしょうか? よろしくお願いします! 

  • 浮動小数点表示の問題です教えてください。

    浮動小数点表示の問題です教えてください。 ・浮動小数点表示は10進数でいくつを表しているか? 符 指数 仮数 0 000 00 0 000 01 0 000 10 ・  ・   ・ ・  ・   ・ ・  ・   ・ 1 111 01 1 111 10 1 111 11 ±□×2^□ の形で表として示せ。 という問題です。 回答お願いします。