• 締切済み

基本情報試験 午後の質問

明日の基本情報のための勉強中です。 H13年春午後問1の問題をといています。 テキストを見ると浮動小数点のあらわし方として ・(-1)^S*(0.M)*2^(E-127) ・(-1)^S*(1.M)*2^E と書いてあるのですが、問題の解説には ・(-1)^S*(1.M)*2^(E-127) と書いてあります。 どちらが正しいのでしょうか?それともどちらとも正しいのでしょうか? 又、(0.M)を使うときと(1.M)を使うときの違いは何でしょうか?

みんなの回答

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

どちらも間違っています。 回答No.1で紹介されているとおり,実在するコンピュータではIEEE754形式を一般的に用いています。IEEE754形式の概略は次のとおり。さらに回答No.1のリンク先で解説されているとおり,ゼロ,無限大,非数(NaN: Not a Number)など特殊なビットパターンも規定されています。 (-1)^S*(1.M)*2^(E-127) 符号部… 1bit長。仮数部の符号。0のとき正,1のとき負 指数部… 8bit長。下駄履き表現 仮数部…23bit長。けち表現(隠れ1表現) それに対して。 IEEE754の規則が複雑で初学者には難しいと思われるためでしょうか, 以前の情報処理技術者試験ではそれを簡略化した仮定の浮動小数点形式を出題していました。 基本情報技術者試験 平成13年 春期 午後 問1 http://www.rs.kagu.tus.ac.jp/infoserv/j-siken/H13a2/pm01.html の問題文で規定されている浮動小数点形式の概略は次のとおり。 (-1)^S*(0.M)*2^E 符号部… 1bit長。仮数部の符号。0のとき正,1のとき負 指数部… 7bit長。2補数表現 仮数部…24bit長。仮数部を0.Mの形で表現したときのM ---------------- この (-1)^S*(0.M)*2^E という式は,今回の質問文に登場する3つの式のどれにも当てはまりません。よって,この問題に対する解説としてはすべて間違っています。 情報処理技術者試験に限らず,試験において「正しい」というのは,問題文で提示された諸条件を正確に読解して,それに即した解答をするということです。 今回のH13春 基本 午後問1に解答するためには,IEEE754形式に関する詳細な知識は不要です。 ---------------- > (0.M)を使うときと(1.M)を使うときの違いは何でしょうか? 回答No.1で解説されているとおり,(1.M)という「けち表現(隠れ1表現)」を用いることで,指数部のbit長に影響を及ぼさないまま,仮数の精度を1bit増やすことができます。

回答No.1

浮動小数点をコンピュータ内で表現するには IEEE754 を使うのが一般的ですが、それは問題の解説のような表記です。 http://ja.wikipedia.org/wiki/IEEE_754#32.E3.83.93.E3.83.83.E3.83.88.E5.8D.98.E7.B2.BE.E5.BA.A6 上記のwikipediaにも書いてありますが、0.Mだと、 M = 0にして素直に0を表現できますが、0以外の数字では1がMの最初に来るので、仮数部のを1桁常に無駄にします。これを1.Mにしたら素直に0を表現できませんが、表現できる桁数は1つ増えます。 (wikipediaではけち表現と書いてあります) 1.Mの場合、0を表現するのにE = 0、M = 0で表現しますが、そうすると2^(E-127)の最小値は2^-126となります。 ちなみに、単精度整数・倍精度整数ともにIEEE754表現だと変数を整数型と思って大小比較して浮動小数点型の大小が判定できるようになっていますが、(-1)^S*(1.M)*2^Eと(E-127)になっていないと、当然E = -127、M=0で0を表現するでしょうから、それができない気がします。