JJ プログラム仙人修行日誌

2024/04/20 からは、プログラム仙人修行の日誌を書いてます。

ソフトウェア開発技術者午前平成18年春問01


 次の浮動小数点表示法がある。小数点は仮数の左にあり,指数は 64 の"下駄
(げた)履き表現"であって,値は (-1)^s × 0.f × 2^(e-64) である。二つの
16 進数 45BF0000 と 41300000 を、この浮動小数点表示法で表現された値として
加算した結果はどれか。

31 30 24 23 0
┌―┬―――┬――――――――――――┐
│ S│ e  │   f         │
└―┴―――┴――――――――――――┘
↑ 指数部    仮数
 符号
(正:0,負:1)

(正

 ア 41EF0000

 イ 45C20000

 ウ 45EF0000

 工 86EF0000

■キーワード■ 浮動小数

■解答■
  ソフトウェア開発技術者午前平成18年春問01

 イ 45C20000

> 手がつけられなかった問題です。どうか解説お願い致します。

 正の数同士を足していること,さらに,指数部あたる部分,45 と 41 とで,
かなりの大きさが違うので,答えは,イもしくはウで,指数の変化が少ない
方の,イであるということがだいたい予想できます。

 あとで,私のブログとプレミヤ版の宿題メールに解説を載せておきます。

 と宣言をしておきましたので,日付が替わる前に解説を書きます。

斎藤解説


45BF0000 = 0 100 0101 1011 1111 0000 0000 0000 0000
      s| e | f |
(64)10=(100 0000)2 なので,
浮動小数点形式で表すと
 (0.1011 1111 0000 0000 0000 0000) × 2^(100 0101 - 100 0000)
= (0.1011 1111 0000 0000 0000 0000) × 2^(0101) ……(A)

同様に

41300000 = 0 100 0001 0011 0000 0000 0000 0000 0000
浮動小数点形式で表すと
 (0.0011 0000 0000 0000 0000 0000) × 2^(100 00011 - 100 0000)
= (0.0011 0000 0000 0000 0000 0000) × 2^(0001) ……(B)

ここで,(A) + (B) をします。

  (0.1011 1111 0000 0000 0000 0000) × 2^(0101)
 + (0.0011 0000 0000 0000 0000 0000) × 2^(0001)

                                                                                                    • -

まず,指数を調整し,足し算をします。

  (0.1011 1111 0000 0000 0000 0000) × 2^(0101)
 + (0.0000 0011 0000 0000 0000 0000) × 2^(0101)

                                                                                                    • -

  (0.1100 0010 0000 0000 0000 0000) × 2^(0101)

これをビットの形式にすると,
指数部分,0101 + 100 0000 (64=100 0000 を加える)
仮数部分,1100 0010
となるので,

0 100 0101 1100 0010 0000 0000 0000 0000
16進数表記にすると

4 5 C 2 0 0 0 0

よって,解答は,
イ 45C20000