浮動小数点の数値表現についての疑問

このQ&Aのポイント
  • 浮動小数点の数値表現について疑問があります
  • 具体的な例を挙げて解説していただけると助かります
  • 浮動小数点形式の数値表現について詳しく教えてください
回答を見る
  • ベストアンサー

この問題の解法が分かりません。

【問題】 4バイト(最上位ビットから1ビットの符号ビット、7ビットの指数部、24ビットの仮数部からなる)の数値で表現する浮動小数点を考える 。この形式で表現される浮動小数点数の絶対値は、 16^n * (f1 / 16 + f2 / 16^2 + f3 / 16^3 + f4 / 16^4 + f5 / 16^5 + f3 / 16^3) となる。ただし、nの負数は2の補数で表すものとする。また、fi(i=1,2,3...6)は、0から15までの数値である。例えば、10進数の16.5は 16.5=16^2*(1/16+0/16^2+8/16^3)…(1) であるから、浮動小数点形式では16進数表示で02108000・・・(2) となり、 -16.5は82108000・・・(3) となる。 分からないのは、問題文中の「例えば~」以降で(1)、(2)、(3)がどうしてそのように表されるのか理解できません。分かる方詳細に教えてください。

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

  • ベストアンサー
  • gungnir7
  • ベストアンサー率43% (1124/2579)
回答No.2

指数関数は y=m*16^x となります。 mが仮数部、xが指数部。ここまではいいですか? (ここが分からないと数学の教科書を読み返してもらうことに) 次にここが最大の山場なのですが、 仮数部の値は1/16≦m<1 の範囲内になるように調整します。 つまりその状態が(1)です。 上の式に当てはめれば y=m*16^2 となっています。 指数部は2ですね。マイナスは符号ビットが1が立ちます。 すると先頭8ビットは次のようになります。  1     0000010 符号ビット   指数部2 これを合わせると10000010 で最初の82が完成です。 +の場合は符号ビットが0なので02になるわけです。 仮数部は1/16の倍数、つまり16で割っています。 すると余りは必ず 0~15 の範囲に来ます。 ここもよく工夫されているところで 4ビットで1つの桁を表せます。 (1)でも仮数部の並びは 1、0、8 となってますから 4ビット単位で配置していくと108となります。 あとは辻褄を合わせるために後ろに0を埋めていきます。 これで完成になります。

marucha
質問者

補足

>>次にここが最大の山場なのですが、 仮数部の値は1/16≦m<1 の範囲内になるように調整します。 つまりその状態が(1)です。 (1)の導出の仕方はないのですか? 自力で見つけるしかないのでしょうか?

その他の回答 (2)

  • gungnir7
  • ベストアンサー率43% (1124/2579)
回答No.3

>(1)の導出の仕方はないのですか? ええっとこれはそれほど難しくないのですが、 まずは10進数を16進数に変換できないことには始まりません。 16.5は 16進数で10.8になります。 ここの変換はさすがに自分で計算するよりない。 次に1/16<x<=1 ですが、10.8 を小数点以下にすればいいです。 すると2回右にずらせば0.108となります。 この2回右にずらした状態が 16^2 で割った値になっています。 よって指数部は 16^2 が来ます。 このずらすという行為はシフトとよばれています。 右シフトや左シフトというものを会得されるとより考察が深まります。

marucha
質問者

お礼

よく分かりました。 詳細な回答ありがとうございます。

  • kazusone
  • ベストアンサー率54% (33/61)
回答No.1

16.5 = 0.165*10^2とします。 ここで符号ビットと指数部が決まります。0x00(符号)+0x02(指数)=0x02です。 0.165を1/16で割ると2.75です。1/16の桁が2=0x2になります。 0.165-(2/16)=0.04が余ります。 0.04を1/256で割ると10.24です。1/256の桁が10=0xAになります。 0.04-(10/256)=0.0009375を同様に1/4096で割ると.... 022A....となるのではないでしょうか?

関連するQ&A

  • 浮動小数点形式の問題

    数値を32ビット浮動小数点形式で表す。指数部は2を基数とし、負数は2の補数で表現する。10進数0.375をこの2を基数とした浮動小数点形式で正規化したものはどれか。ただし結果は16進数で表現する。 答え:7FC00000 という問題です。 まず0.375を2進数に 0.011 正規化 0.11 * 2^-1 指数部-1を2進数で求める -0000 0001 ->1111 1111 仮数部符号は正の数なので0 0111 1111 ???? ???? ???? ???? ???? ???? と・・・ ここの部分からわかりません・・・ (なぜか手持ちの参考書には省略してあり・・・) 7Fの部分はこれで間違いないでしょうか? またそのあとのC00000 はどうやって導くのか教えてください。 お願いいたします

  • 浮動小数点数

    再質問で畏れ入ります。 数値を32ビット浮動小数点形式で表す。指数部は2を基数とし、負数は2の補数で表現する。10進数0.375をこの2を基数とした浮動小数点形式で正規化したものはどれか。ただし結果は16進数で表現する。 答え:7FC00000 という問題です。 まず0.375を2進数に 0.011 正規化 0.11 * 2^-1 指数部-1を2進数で求める -0000 0001 ->1111 1111 仮数部符号は正の数なので0 0111 1111 ???? ???? ???? ???? ???? ???? と・・・ ここの部分からわかりません・・・ (なぜか手持ちの参考書には省略してあり・・・) 7Fの部分はこれで間違いないでしょうか? またそのあとのC00000 はどうやって導くのか教えてください。 お願いいたします

  • 数値を浮動小数点表示

    基本情報技術者の勉強を始めたのですが、 浮動小数点の問題で分からないものがありました。 問題は、 ・基数は2。 ・数値を24ビットで表現。 ・左から1ビットは仮数の符号を表す。 (0なら正、1なら負) ・左から数えて2ビット目から8ビット目までで 2のべき乗を表す。(負数は2の補数で表す) ・右16ビットは仮数の絶対値を表す。 (あと、左から数えて8ビット目と9ビット目の間が 小数点位置、だという表示があります。) 以上のように24ビットの浮動小数点表示で、最大数を 16進数で表したものはどれか? この問題の答えは3FFFFFとなっているのですが、 どうしてこのような解答になるのでしょうか? ヒントには「指数部は負数を2の補数で表すので、左から 2ビット目も0でなければならない」とあるのですが、 わけわからない状態です。 簡単で結構ですので、教えていただけないでしょうか。 よろしくお願いします。

  • 浮動小数点の問題です。

    10進数+0.375を浮動小数点で記憶させ、その記憶領域のダンプリストを読み取ると、 0.375は16進数で(1)に、 -1は16進数で(2)となる。 答えは(1)は7F00、(2)8600です。 この2つの問題の途中式と解説をお願いします。 バイト型:バイト数は1バイト,負の補数は2の補数で表す 整数型:バイト数は2バイト,負の補数は2の補数で表す 浮動小数点:バイト数は2バイト,符号1ビット,指数部5ビット,仮数部10ビット ビット番号0:符号部.仮数部の符号が入っている.0なら正,1なら負 ビット番号1-5:指数部.負の値を2の補数で表す ビット番号6-15:仮数部.ビット番号6を小数点第1位とする仮数部の小数点以下の絶対値が、正規化された2進数で入っている 正規化とは,仮数部が2進数で0.1以上1.0未満になるよう指数部を増減する操作である

  • 符号付の整数8ビット…

    教えてください。 符号付整数8ビットの2の補数で表現するときの11101111-11110011の計算を2進数で示すときの途中の計算方法を教えてください。 10進数のー13を8ビットの固定小数点(負数は2mの補数形式)の途中の計算方法も教えてください。

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

    数値を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にも符号ビットがないと出来ないように思い質問しました。回答宜しくお願い致します。

  • 記数法(n進数)

    ① −(2D)16 を符号付絶対値 8 ビットで表す ② −(146)8 を「負数は 2 の補数で表現する」8 ビットで表す ③ 符号付絶対値 8 ビット (10110101)2 を 10 進数で表す ④「負数は 1 の補数で表現する」 8 ビット (01011001)2 を 8 進数で表す ⑤「負数は 2 の補数で表現する」 8 ビット (10111011)2 を 16 進数で表す ()の後の数字は小文字です。 n進数からm進数への変換と計算はできるようになったのですが、ビットの表現などが分からないので教えて頂きたいです。

  • 浮動小数点数について

    現在情報処理の勉強をしているのですが、下記の問題が解けません。。 もし、わかりすく教えてもらえれば,,,と思い、、、 ↓ 数値を16ビットの浮動小数点数で表現する。10進数0.375を正規化した表現を、2進数であらわすとどうなるか求めよ。ここでの正規化は仮数部の有効数字よりも上位の0がなくなるように指数部を調整する操作である。 仮数部の符号(正は0 負は1)(1ビット) 奇数を2とする指数部で、負数は2の補数(4ビット) 仮数の絶対値(11ビット) で、 答えは 0111 1110 0000 0000 なのですが、この指数部がどうしてもわかりません。 初心者なので、、わかりやすく教えてくだされば、、うれしいな。と思うのです。

  • 浮動小数点の正規化方法について

    基本情報処理技術者試験を20日に受けます。勉強不足で困っています。どなたか教えてください。 問題「数値を16ビットの浮動小数点表示法で表現する。10進数0.375を正規化せよ:ここでの正規化は仮数部の有効数字よりも上位の0がなくなるように指数部を調節する操作である。」  答え「0111111000000000」 最初の1ビットが仮数部の符号、次の4ビットが2のべき乗の指数部で負数は2の補数、残りの11ビットが仮数部の絶対値 となっています。 0.375を2進数に直すところまではわかったのですが、次の正規化がよくわかりません。よろしくお願いいたします。

  • 2進数表現

    負数を表すのに2の補数を用いる16ビットの2進数表現(固定小数点)について次のことについて教えてください。 1.表現できる正の最大数を2進数、10進数で表すとどうなるか。 2.表現できる最小の負数(絶対値が最大の負数)を2進数、10進数で表すとどうなるか。 この2つの問題なのですが、どう考えればいいのでしょうか?題意の負数を表すのに2の補数を用いる16ビットの2進数表現(固定小数点)からあまり意味が分かっていないのですが… よろしければ答えだけではなく考え方も教えてください。よろしくお願いします。