広告 基本情報技術者

【基本情報技術者試験】浮動小数点数

本日のテーマは「浮動小数点数」です。

次の問題は過去に出題された基本情報技術者試験の過去問です。わかるかな?

はい、答えは「エ」の正規化です。

問題

0以外の数値を浮動小数点表示で表現する場合,仮数部の最上位桁が0以外になるように,桁合わせする操作はどれか。ここで,仮数部の表現方法は,絶対値表現とする。

ア:切上げ イ:切捨て ウ:桁上げ エ:正規化

基本情報技術者平成29年春期 午前問2

コンピュータにおける数値表現の1つであり、主に小数点を含む数値を表現するときに利用するのが「浮動小数点数」です。

本記事では「浮動小数点数」について図解で分かりやすく解説していきます。

本記事で学べること

  • 浮動小数点数の形式(符号・指数部・仮数部)を理解
  • 浮動小数点数の正規化を理解
  • 基本情報技術者試験の過去問の解き方を学ぶ

浮動小数点数

浮動小数点数とは、コンピュータにおける数値を表現する方法の一つで、主に小数点を含む数値を表現するときに利用するものです。

スポンサーリンク

浮動小数点数の形式

浮動小数点数は次のように「符号」「指数部」「仮数部」の形式で表現します。※32ビットの例

浮動小数点数

  • 符号:正の数が0、負の数が1
  • 指数部:2nのnの部分を2進数表記にした値を格納(負の数の場合は2の補数を使用する)
  • 仮数部:正規化した小数点以下の値を格納

浮動小数点数の「仮数部」と「指数部」に入る値のイメージ例は次のとおりです。(仮数部:小数点以下の値が入る、指数部:2nのnを2進数にした値が入る)

浮動小数点数

正規化

正規化とは、小数点の位置を調整し最上位桁を0以外の値にする作業のことです。

浮動小数点数の正規化

なぜ正規化が必要なのですか?

浮動小数点数の仮数部は桁数が決まっており、有効桁数を超えた部分は丸め誤差により切り捨てられてしまいます。

例えば 0.036×102と0.36×101は同じ値です。ただし後者の方が仮数部の桁数は少なくすみます。(前者:036の3桁、後者:36の2桁)

正規化は桁数を稼ぐための作業です。仮数部の最上位桁を0以外に調整することで、丸め誤差が発生する頻度が少なくなり精度が上がります。

浮動小数点数の求め方

例題

10進数の「0.25」を32ビットの浮動小数点数の形式で表現せよ

まずは10進数「0.25」の2進数を求めます。

2進数への変換

  • 2 × 0.25 = 0.5
  • 2 × 0.5 = 1.0

上記より10進数「0.25」→ 2進数「0.01

仮数部の求め方

仮数部には2進数「0.01」を正規化した値が入ります。

正規化

0.01

↓ 正規化

0.1 × 2-1

仮数部には次のように正規化で求めた「0.1」の小数点以下の値が入ります。※足りない部分は0で埋める

仮数部

指数部の求め方

指数部には2nのnを2進数に変換した値が入ります。今回は「0.1 × 2-1」でnは「-1」です。負の数の場合は2の補数を使って2進数を導き出します。

2の補数

0000001 (10進数:1)

↓ すべてのビットを反転させる

1111110

↓ 1を加算する

1111111 (10進数:-1)

指数部には次のように「2-1」の「-1」を2進数に変えた値「1111111」が入ります。

指数部の設定

符号を設定して完成

最後に符号を設定すれば完成です。10進数「0.25」は正の数なので、符号には"0"を入れます。(0:正の数、1:負の数)

指数部の設定

IEEE754の浮動小数点数

IEEE(米国電気電子学会)により規格化された、浮動小数点数のことを「IEEE754」といいます。

スポンサーリンク

IEEE754 浮動小数点数の形式

IEEE754の浮動小数点数は次の形式で表現します。※32ビットの例

浮動小数点数(IEEE754)

IEEE754の特徴は「1.××」の形で正規化します。例えば、2進数「0.011」を正規化すると0.11 × 2-1だが、IEEE754の場合は、1.1 × 2-2となり1ビット多く保持することができます。(23ビットあれば24ビット分 表現できる)

  • 符号:正の数が0、負の数が1
  • 指数部:2nのnの部分に127(バイアス)を加算後、2進数表記にした値を格納
  • 仮数部:1.××の形式で正規化した小数点以下の値を格納

IEEE754 浮動小数点数の求め方

例題

10進数の「0.375」を32ビットの浮動小数点数(IEEE754)の形式で表現せよ

まずは10進数「0.375」を2進数に変換します。

2進数への変換

  • 2 × 0.375 = 0.75
  • 2 × 0.75 = 1.5
  • 2 × 0.5 = 1.0

上記より10進数「0.375」→ 2進数「0.011

仮数部の求め方(IEEE754)

仮数部には2進数「0.011」を1.××形式に正規化した値が入ります。

正規化

0.011

↓ 正規化

1.1 × 2-2

仮数部には次のように正規化で求めた「1.1」の小数点以下の値が入ります。※足りない部分は0で埋める

IEEE754仮数部の設定例

指数部の求め方(IEEE754)

指数部には2nのnにバイアスと呼ばれる127を加算した結果を2進数に変換した値が入ります。

バイアスには「ゲタをはかせる」(ゲタ履き表現)という意味があり、指数部にバイアスを加算することで、負の数を含む表現が正の数だけであらわせるようになります。

今回の例では、「1.1 × 2-2」とnの部分が「-2」なので「-2」にバイアスの「127」を加算します。

バイアスを加算

-2 + 127 = 125

↓ 2進数に変換

01111101

バイアス値を加算した結果である「125」を2進数に変えた値「01111101」が指数部に入ります。

IEEE752 指数部の設定例

符号を設定して完成(IEEE754)

最後に符号を設定すれば完成です。10進数「0.375」は正の数なので、符号には"0"を入れます。(0:正の数、1:負の数)

IEEE753 符号の設定例

基本情報技術者試験 過去問の解説

問題

0以外の数値を浮動小数点表示で表現する場合,仮数部の最上位桁が0以外になるように,桁合わせする操作はどれか。ここで,仮数部の表現方法は,絶対値表現とする。

ア:切上げ イ:切捨て ウ:桁上げ エ:正規化

基本情報技術者平成29年春期 午前問2

浮動小数点数の正規化は、仮数部と指数部を調整することで仮数部の最上位桁を0以外の値にする作業です。正規化の目的は、有効桁数を最大化し丸め誤差をできるだけ少なくすることです。

正解は「エ」です。浮動小数点数の正規化を理解していれば簡単な問題ですね。

helpful