基数による浮動小数点表示での計算について

このQ&Aのポイント
  • 基数による浮動小数点表示での計算について質問があります。
  • 質問文章では、SW-H20の問題として、基数変換に関する疑問が述べられています。
  • 具体的には、16進数を定義に変換する際に、先頭の数値がどこにいってしまったのか疑問が生じています。
回答を見る
  • ベストアンサー

基数による浮動小数点表示での計算について

SW-H20の問題です。^は乗算、_は_16なら16進数を示します。 以下の不動少数表示法がある (-1)^s × 0.f × 2^(e-64) ここで、 45BF0000_16(16進数の45BF0000の意味)を上記の定義に変換すると、 0.BF0000_16 × 2^5 となる、というのですが、解説が省略してありわかりません。 同様に、 41300000_16を上記の定義に変換すると、 0.300000_16 × 2 = 0.030000_16 × 2^5 になるとのことですが、これもわかりそうでわかりません。。 それぞれ、先頭の45や41はどこにいってしまったのでしょうか? 基数変換に詳しい方、宜しくお願いいたします。

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

  • ベストアンサー
  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.1

最初の問題 45BF0000 の最初の1バイトを2進数に変換します。 01000101 ここで、頭の0は符号ビットなので、この数字は正の数字。 残りの7ビットで指数部を表すのですが、指数の表記は 2^(e-64) なので、64(2進数:01000000、16進数:40)を引いてやります。 すると +0.BF0000*2^5 になります。 同じように、二つ目 41300000 頭のビットは0、指数部は41、41から40を引いて1、結果として +0.300000*2^1 になります。

miraise
質問者

お礼

さっそくのご回答ありがとうございます。 ビットまで落として考えるのですね、そこまではしていませんでした。 >45BF0000 >の最初の1バイトを2進数に変換します。 >01000101 で、左1ビットが符号ビット、残りの7ビットが指数ビットで、 7ビット部分は、45_16、ここで40_16を引くと、5になる、ということですね。 (私は、1000101_2から、64の下駄履き部分の1000000_2を引くと、残りは0000101_2、つまり5_10となる、と考えてみました) 二つ目の、0.30000_16 × 2も、16進数なので、小数点の位置が一つずれる→2^4倍する→00.3000_16 × 2^5ということでよいでしょうか。 基数変換は苦手なので、助かりました。 ありがとうございました。

miraise
質問者

補足

>それぞれ、先頭の45や41はどこにいってしまったのでしょうか? についてですが、 45や41は、符号ビットと指数部なので、最初の1バイトは消えるのですね。 いきなり消えた(ように見えた)ので戸惑ってしまいました。 おかげでスッキリしました。 ありがとうございました。

その他の回答 (1)

  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.2

#1です。 0.300000_16 × 2 = 0.030000_16 × 2^5 の説明が抜けていました。 左式を右式にするには、2^4=16^1を考えればOKです。 指数が増えると、小数点はその分左に移動します。 2^1から2^5に変更するときは、2進数で小数点が左に4桁分移動するので、2進数では 0.0101000000000000*2^1  ↓ 0.0000010100000000*2^5 になります。 これを16進数に直すと、 0.300000*2^1  ↓ 0.030000*2^5 になります。 2進数で4桁分移動させているので、16進数では1桁分の移動になっています。 実際の問題は、この2数の加算なので、 0.BF0000_16*2^5 0.030000_16*2^5 ------------------ 0.C20000_16*2^5 符号は(+)で指数が(5)、下駄(64)を履かせて指数部は(45)になるので、 45C20000 となり、答えは(イ)が正解。

関連する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 はどうやって導くのか教えてください。 お願いいたします

  • 基数変換の変換につきまして

    現在基本情報技術者の勉強をしています。 10進数から2進数への変換など基数変換がよくわかりません。 10進数の数値を 「 0 」 になるまで 「 2 」 で割り算していき、その結果の「余りの数 」を並べることによりある10進数の値を2進数の値へ変換することができることは分かるのですが、 どういう仕組みでそのようにしたら求められるのかがまだ理解しきれないのです。 とくに少数を変換するときなどはまた戸惑ってしまい、それをまた16進数や8進数などスムーズに変換することができません。 基本的な質問で大変申し訳ないのですがどうかご教授頂ければ幸いです。 どうぞよろしくお願いいたします。

  • 基数変換について

    応用情報技術午前問題集を購入しましたが 基数変換について躓いています。 解説がよく分りません。 【問題】 aを正の整数とし、b=a^2とする。aを2真数で表現するとnビットであるとき、bを2真数で表現すると高々何ビットになるか。 ※a^2はaの二乗です。 ア:n+1 イ:2n ウ:n^2 エ:2n 【解説】 8の2乗は64を例に、問題のb=a^2を置き換えてみる。 a(8)、b(64)とする。 a(8)を2進数で表現するとn(3)ビットであるとき、 b(64)を2進数で表現すると6ビットになる。 イ:2n=2×3=6 だそうなんですが、 8は4ビット(1000)、64は7ビット(100 0000)だと思うのですが どう考えたらよいのでしょうか。 日本経済新聞発行 2009年度版応用情報技術高度共通午前問題集より

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

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

  • 浮動小数点の計算について

    Javaで0.1+0.2を計算すると0.30000000000000004になったり、10.0-9.9を計算すると、0.09999999999999964になったりするのはなぜですか? 参考書では。 「浮動小数点数を使った計算では、一見正確な値が計算されてるように見えてもほとんど場合内部では少しだけ誤差を含んだ値を持ってると、考えた方がいいでしょう。どのような計算を行った時にどの程度の誤差が出るのかは難しい話題になるのでこの本では詳しく説明しませんが、例えば100.0-99.99のように同じぐらいの数同士で引き算を行うと誤差が現れやすくなります。」 と書いてありました。 この本ではこれだけで説明が終わりました。 なぜ浮動小数点で計算を行うと誤差が出るのか詳しく教えていただけると助かります。

    • ベストアンサー
    • Java
  • 基本情報 過去問16年 問4について

    基本情報資格の勉強をしているのですが、平成16年度の問4の問題でわからない点があるので教えてください。 問題は下記を参考にしていただきたいのですが、 http://情報処理試験.jp/FE16b-pm/t04.html 自分が持っている解説によると、 ”関数MToIntは後述するように、Frdx(関数MToIntではRdx)を基数とする数字列Fnum(関数MToIntではNum)を十進数に変換する。” つまり M進数→10進数→N進数 となり、これを前提に問題を解いていくようなのです。 しかし、私には”後述”の部分がどこかわかりません。 おそらくどこか問題の記述から10進数であることが、把握できるはずだと思うのですが、 どの個所から考えればよいのでしょうか?? あと他のサイトなどの解説を読んで見ると、変換する基数が10進数であることの説明が特に書いていない気がするのですが、変換する基数を10進数だとしなくても解ける問題なのでしょうか?? よろしくおねがいします。

  • 2進浮動小数点表示

    「10進数5を32ビット長の2進浮動小数点表示で表せ。」という問題があるのですが 10進数5を2進数表示すると101となり、0.101*2^3と表せるという所まで分かったつもりなのですが後が続きません。 どうかお力添えの方をよろしくお願いします。

  • 「浮動小数点表示」と「丸め」について

    数値解析についての質問です。 「23.49を有効数字4桁の浮動小数点表示で書け」という問題があるときは 0.2349 * 10^2 と答えるのが正しいのでしょうか。 つまり「浮動小数点表示で答えよ」とあれば、 0.○○○... * 10^○の形で書けば良いのでしょうか。 また、数値の丸めの仕方に関する質問なのですが、教科書に以下のような記述がありました。 k+1桁以降の数を切り捨てる a.この切り捨てられた数が第k桁の単位の半分より小さいときは、第k桁の数はそのままにする。 b.もし半分より多きときには第k桁の数に1を加える c.この切り捨てられた数が第k桁のちょうど半分のときには最も近い偶数に丸める とあるのですが、その後の記述で 「1.2535をそれぞれ小数点以下3桁、2桁、1桁で丸めると、1.254,1.25,1.3が得られる」また「小数第3位以下の情報なしで、1.25を1桁で丸めると1.2になる」とあるのですが、 後者が1.2になるのは理解できるのですが、最初の規則に則ると前者も1.2になるように思うのですが、何故1.3になるのでしょうか。 以上の規則に則った上で以下の問題に答えてみました。 問.-89.216618, 500000, -0.002213675を丸めて有効数字5桁の浮動小数点表示で書け 僕の答え -0.89217 * 10^2 0.50000 * 10^6 -0.22137 * 10^-2 というのは合っていますでしょうか。 質問が多くて大変恐縮ですが、解説、ご指摘をお願いします。 よろしくお願いします。

  • 浮動小数点表示の考え方

    平成22年春期 応用情報技術者試験 午前の問い2で出た問題についてです。 10進数の0.25を2進数の浮動小数点表示した場合、 どのような表示になるかという問いで分からない部分があります。 0.1×2^-1で表せるので、指数部は-1で仮数部は1となると言っているのですが、 どうして0.1の1が最上位ビットとして考えるのかわかりません。 解説動画みてもわかりませんでした。 10進数の1.25を2進数にすると、1×2^0+0×2^-1+1×2^-2ですが、 この場合は0.101×2^1として表して指数部は1で仮数部は101と考えるという事でしょうか? なぜ1.01×2^0としてそのまま扱わないのか良くわかりません。 情報系の計算方法としては、小数点より前の数字を0にして有効数字をカウントするのが一般的という事でしょうか? 分かる方教えてください。 [問題文] http://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2010h22_1/2010h22h_ap_am_qs.pdf [答え解説] https://www.youtube.com/watch?gl=JP&hl=ja&v=lqZBsBmLtpI