IT用語を超やさしく理解する
浮動小数点数
別名: 浮動小数点 / floating-point number / floating-point representation
先に知っておくと分かりやすいことば(1語)
必要なら先に確認できます。知っていることばは、そのまま読み進めて大丈夫です。
- 固定小数点数固定小数点数の考え方、小数部のbitの重み、刻み幅、表現範囲、2の補数との関係を初心者向けに説明します。
30秒で思い出す
浮動小数点数は、小数点の位置を指数で動かして、非常に大きい数から非常に小さい数まで表す方法です。
基本的には「符号」「指数」「仮数」に分けて、数を次のような形で考えます。
符号 × 仮数 × 基数^指数
2進数では基数は2です。
超やさしく理解
10進数の科学表記を思い出すと分かりやすくなります。
123000 = 1.23 × 10^5
0.00123 = 1.23 × 10^-3
小数点を固定せず、指数で位置を表すため、同じような桁数でも広い範囲の数を扱えます。
コンピュータでは同じ考え方を2進数で使います。
1101.0₂ = 1.101₂ × 2^3
右辺の 1.101 が仮数に相当し、3が指数です。
符号・指数・仮数
浮動小数点数は大きく次の役割へ分けて考えられます。
| 部分 | 役割 |
|---|---|
| 符号 | 正か負かを表す |
| 指数 | 小数点をどれだけ動かすかを表す |
| 仮数 | 数の有効な並びを表す |
指数に使うbitが多いほど広い範囲を表しやすくなり、仮数に使うbitが多いほど細かい値を区別しやすくなります。
正規化とは?
同じ数でも、小数点の位置を変えれば複数の書き方ができます。
たとえば2進数の 1101.0 は、
1101.0 × 2^0
11.010 × 2^1
1.1010 × 2^3
のように書けます。
このままだと表し方がばらばらになるため、決められた形へそろえるのが正規化です。
2進数では、0でない通常の値を概念的に、
1.xxxxx × 2^e
の形へそろえて考えると理解しやすくなります。
正規化した値を読む
たとえば、
1.101₂ × 2^3
なら、小数点を右へ3桁動かすので、
1101₂
です。
10進数へ直すと、
8 + 4 + 1 = 13
となります。
逆に、
1.101₂ × 2^-3
なら、小数点を左へ3桁動かして、
0.001101₂
となります。
固定小数点との違い
固定小数点では、小数点の位置を形式全体で固定します。
浮動小数点では、指数によって小数点位置を動かせます。
| 観点 | 固定小数点 | 浮動小数点 |
|---|---|---|
| 小数点位置 | 固定 | 指数で動く |
| 得意なこと | 一定の範囲を一定の刻みで扱う | 非常に広い範囲を扱う |
| 注意点 | 範囲と刻み幅の配分 | 値によって刻み幅が変わる |
単精度と倍精度
広く使われるIEEE 754の2進浮動小数点では、代表的に単精度と倍精度があります。
| 形式 | 全体bit数 | 符号 | 指数部 | fraction(仮数の小数部として保存する部分) |
|---|---|---|---|---|
| 単精度 | 32bit | 1bit | 8bit | 23bit |
| 倍精度 | 64bit | 1bit | 11bit | 52bit |
通常の正規化数では、仮数の先頭が1になることを利用して、その先頭の1を保存せず省略できます。このためfractionに保存するbit数より、実質的に1bit多い精度を使えます。
倍精度は単精度より多くのbitを使うため、より広い指数範囲と高い精度を持ちます。
どこで使う?
浮動小数点は、値の大きさが広い範囲にわたる計算で使いやすい表現です。
科学技術計算、画像や3Dの座標、センサー値、統計処理など、整数だけでは扱いにくい連続的な値を計算するときに広く使われます。
ただし「小数を使う=必ず正確」という意味ではありません。広い範囲を扱える代わりに、有限bitによる近似や誤差を意識する必要があります。
すべての小数を正確に表せるわけではない
浮動小数点数もbit数が有限なので、表せる値は離散的です。
10進数では簡単に書ける0.1も、2進数では有限桁で終わらないため、多くの2進浮動小数点形式では近い値として保存されます。
この「表せない値をどう丸めるか」や、計算で起きる誤差の詳しい話は次のKnowledgeで扱います。
よくある勘違い
浮動小数点なら無限に大きな数を表せる?
いいえ。指数部のbit数が有限なので、表せる範囲には上限と下限があります。
倍精度ならどんな小数も正確?
いいえ。倍精度は単精度より多くの値を細かく表せますが、有限bitなので表せない値は残ります。
仮数のbit数は値の大きさだけを決める?
主に値をどれだけ細かく区別できるか、つまり精度に強く関係します。大きさの範囲には指数部が大きく関係します。
このKnowledgeで扱わないこと
ここでは浮動小数点の基本構造、正規化、単精度・倍精度の位置付けまで扱います。
丸め、打切り、桁落ち、情報落ち、オーバーフロー、アンダーフローなど、計算時の誤差や限界の詳細は次のKnowledgeへ分けます。
ここまで分かればOK
- 浮動小数点数は指数で小数点位置を動かして広い範囲を表す方法だと説明できる
- 符号・指数・仮数の役割を区別できる
- 2進数を 1.xxxxx × 2^e の形へ正規化できる
- 正規化された簡単な2進数を元の値へ戻せる
- 固定小数点との違いを説明できる
- 単精度32bitと倍精度64bitの位置付けを説明できる
- 有限bitなので、すべての小数を正確には表せないと分かる
資格との関係
基本情報技術者試験
- シラバス
- Ver.9.2
- 必要な理解
- 問題で応用できる
- 重要度
- 高
- 分野
- テクノロジ
関連するIT用語
次に読む
理解できたか確認しよう
答えを選んで、なぜそうなるのかまで確認できます。
確認問題 1
小さい2進小数を正規化する
センサー値0.001101₂を、1.xxxxx×2^eの形へ正規化して扱うことになりました。
値を変えずに正規化した表現として最も適切なものはどれですか?
確認問題 2
正規化された2進数を読む
2進数の1.101×2^3を10進数で表したものはどれですか?