• ベストアンサー

勉強の参考にさせて下さい

前回と同じようにもう一つ過去問を手に入れたのですが、同じく回答が手に入らず困っています。 大変お手数だとは思いますが、もうすぐ行われる期末テストの参考にしたいので、出来る範囲で構いませんのでもしどなたか解いて頂ければ大変うれしく思います。 どうかよろしくお願いいたします。 引き放し法除算において各ステップで次のような処理を行うことで,整数の除算を実行でき る.但し,ri はi ステップ目の中間余り, qi は商のi ビット,D は除数である. ・中間余りを左シフトして2ri-1 を求める. ・if(2ri-1 * D >= 0) qi = 1; else qi = -1; ・ri = 2ri-1 - qi D (1) 被除数(X):00100110 (38),除数(D):0110 (6)のときのこの方式による除算ステップを 示せ. (2) 被除数(X):11011010 (-38),除数(D):1010(-6)のときのこの方式による除算ステップを 示せ. [3]IEEE754 標準浮動小数点数に関して以下の問に答えよ. (1)0xafbf0000 という表現のfloat 数の10 進の値(m X 2e の形式でよい)を求めよ. (2)-938.8125 のfloat 表現(16 進数)を求めよ. (3) int では表現できないが,float なら表現できる整数のうち,次の数を求めよ. (a) 正で絶対値が最小(最も0 に近い) (b) 負で絶対値が最小(最も0 に近い) [4]キャスト操作やfloat/double データ型を使用せずに,入力された数のビットを処理して, int/unsigned 数をIEEE754 表現のfloat にキャストする関数とそのドライバをC 又はC++ を用いて次のように書け. (1)処理関数:次のいずれかを選択して書け. (a) unsigned iToF(int): int 数をfloat に変換し,unsigned 数として返す.ま るめはIEEE default の“nearest, half way case to even”. (b) unsigned uToF(unsigned): unsigned 数をfloat に変換し,unsigned 数と して返す.まるめは切り捨て. (2)main 関数: 整数(無符号整数)を入力するとiToF(uToF)を用いて浮動小数点数 に変換してそのビットパターンを16 進で出力せよ.次に,そのfloat としての値を再度出 力し,入力した値と比較してみよ.それらは必ず一致するか.

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

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

[3] IEEE754 標準浮動小数点数については, 下記ja.wikipediaの「1.3.2 32ビット単精度」を参照。 http://ja.wikipedia.org/wiki/IEEE_754 (1) 1 01011111 01111110000000000000000 = afbf0000 S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF バイアスは +127=(01111111)2 なので, -(1.0111111)2 × 2の-32乗。 メンドウなので10進数への基数変換はご自身でしていただけますか。 (2)   (-938.8125)10 = (1110101010.1101)2 ×2の0乗 = (1.1101010101101)2 ×2の9乗 バイアス後の指数部は 9+127=(10001000)2 なので, 0 10001000 11010101011010000000000 = 446ab400 S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF (3) int型は32bit長の整数型であり,最大値は (2の31乗)-1,最小値は -(2の31乗)。 よって「int では表現できないが,float なら表現できる整数」の中から答えると, (a) は (2の31乗) が解答となる。 バイアス後の指数部は 31+127=(10011110)2 なので, (a) 0 10011110 00000000000000000000000 = 4f000000 S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF (b) は精度が十分に長いなら -(2の31乗)-1 が解答となるが, floatの精度は23bit(隠れ"1"表現を含めて24bit長)しかない。よって,   -(1.)000 0000000000 0000000001 ×2の31乗 = -(2の31乗)-2の8乗 が解答となる。 (b) 1 10011110 00000000000000000000001 = cf000001 S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF

Marcocemarco
質問者

お礼

重ね重ね丁寧な解答、誠にありがとうございます!! 是非活用させて頂きます!!