• 検索結果がありません。

IEEE モデル

ドキュメント内 ( ( 5 10 pdf (ページ 111-115)

11.1 2 進数の浮動小数点数

11.2 IEEE モデル

います。私たちは9章、10章を通して、既に2進数には十分に慣れ親しみましたから、この章で

4

は8章を補足説明します。

5

ദ݈ശ DK V ߶ঊശ ŀDKV Ҏঊശ DKV

ദ݈ശ DK V ߶ঊശ DKV Ҏঊശ DKV DK V ೿ہ

図11.1: コンピュータの基本構成要素

11.2.2 指数部

1

32 bit表現の場合、8 bitの大きさを持っています。IEEEモデルでは、指数部に補数表現は用い

2

3、指数nに12710(=011111112)を加えた数n+ 12710を指数部に格納します4。逆に言えば、

3

たとえば指数部の8 bitパターンが110であるならば、指数部の表す数値は12610(= 11012710

4

であることを意味します。指数部の8 bitが25410ならば実際の数値は12710 (= 2541012710

5

を意味します。後に述べますが、IEEEモデルでは指数部の全てのbitが0または1の場合は特殊

6

な数値を意味するため、指数部の有効範囲は[127,128]ではなく、[126,127]です。

7

64 bit表現では、表したい数nに102310(=011111111112)を加えた数n+ 102310を指数部に

8

格納します。そのため、指数部の範囲は[1022,1023]です。21023≒10102、21023≒10102です

9

から、64 bit表現では、非常に小さな数から非常に大きな数値までを扱えます。通常のほとんどの

10

数値計算は64 bit表現で足りると考えられています。

11

11.2.3 仮数部

12

仮数部は、11.1節で示したb1.b2b3...bk の部分です。ここに「b1は0ではない」という条件は、

13

2進数の場合には「b1が必ず1である」ことを意味します。よって仮数部は必ず1.b2b3...bkとい

14

う形になります。つまり仮数部として記憶せねばならないデータはb1、b2、b3、...、bkではなく、

15

b2、b3、...、bkの範囲です。この部分の大きさが、32 bit表現では23 bit、64 bit表現では52 bit

16

です。

17

11.1節で例に挙げた数値14.510を32 bitのIEEE表現で表してみましょう5

18

3IEEE以外の浮動小数点数の規格の中には、指数部の表現に補数表現を用いる規格も存在します。

4これをバイアス(bias)表現とも呼びます。補数表現とは異なる正負の数の表現方法です。

5このような問題はいかにも基本情報技術者試験に出そうな問題です。

0100000101101000000000000000000002

となります。負数14.510では符号bit のみを反転し、

1100000101101000000000000000000002

となります。

1

10進数の数値mを32 bitのIEEE表現に変換する方法をまとめます。

2

1. mの絶対値を正規形の2進数1.b2b3...bk×2nに変換します。ただし、nが[126,127]の範

3

囲に含まれないならば、32 bitのIEEE表現で表すことができません。

4

2. もしmが正数ならば符号bitを0、負数ならば1とします。

5

3. nに12710(= 011111112)を加えた2進数を指数部のbitパターンとします。

6

4. もしbitパターンb2b3...bkが23 bit以下ならば(kが24以下ならば)、b2b3...bkの後ろに適

7

当数の0を付加して23 bitのパターンを作り、それを仮数部のbitパターンとします。もし

8

bitパターンb2b3...bkが23 bitを越えているならば、b2b3...b24の23 bitパターンを仮数部

9

のbitパターンとします6 (この操作は7章でいう丸め処理に相当し、これによって丸め誤

10

差が発生しますが仕方のないことです)。

11

5. 符号部、指数部、仮数部をこの順に連結して作られる32 bitがIEEE表現の浮動小数点デー

12

タです。

13

6. 上に当てはまらない特殊な数値の表現については、以下の補足を参照にしてください。

14

考察  10進数1.010、0.510、0.310の32 bit表現を求めなさい。

15

補足 IEEEモデルでは0や無限大などの特殊な数値を表現できるように工夫されています。これ

16

は、「0で割る」などの演算に対応できるようにするためです7。特殊な数値として、以下のような

17

ものが定義されています。

18

+0 ... 符号bitが0、指数部、仮数部の全bit が0。正の無限小を表します。

19

6ただしb2b3...bkb2b3...b24に端折る際に、b25以下の値を用いて、10進数の四捨五入に相当する処理を行い、b24

1を加える場合もあります。

7IEEEモデルよりも以前の、このような特殊な数値の表現を持たない浮動小数点数の表現法では、「0で割った」結果 が有限値になるなどの現象が起きていました。これではプログラムの間違いを見落とす可能性があり、大問題です。

+ ... 符号bit が0、指数部の全 bitが1、仮数部の全 bitが0。正の無限大を表します。1.0/0

2

などの演算によって生じます。

3

... 符号bitが1、指数部の全bit が1、仮数部の全 bit が0。負の無限大を表します。−1.0/0

4

などの演算によって生じます。

5

NaN ... 指数部の全bitが1、仮数部の1箇所以上のbitが1。log(1)などの演算によって生じる

6

未定義数を意味します。

7

ドキュメント内 ( ( 5 10 pdf (ページ 111-115)