浮動小数点数(IEEE 754)とは?コンピュータで小数を表す世界標準の方式

公開: 更新: カテゴリ: テクノロジ系

30秒で結論

浮動小数点数とは(全体像)

浮動小数点数は、小数(実数)をコンピュータの中で表すための決まったルールのこと。世界共通の規格があり、ほとんどのコンピュータがこの方式で小数を扱っている。

考え方は、理科で習う「3.0×10⁸」のような書き方とそっくり。「数字の部分」と「小数点をどこまでずらすか」を分けて持つことで、とても大きい数も小さい数も同じしくみで表せる。小数点の位置が動くので「浮動」小数点と呼ぶ。

数は次の3つに分けて記録される。

押さえるのは、「範囲は指数が、細かさ(精度)は仮数が決める」という役割分担だ。


詳しく:この表だけ覚えれば戦える

ここが記事の心臓部。浮動小数点数は、まず精度2種類のビット内訳が問われる。

単精度と倍精度のビット内訳

単精度(float)倍精度(double)
全体32ビット64ビット
符号1ビット1ビット
指数8ビット11ビット
仮数23ビット52ビット
bias1271023

数は (-1)^符号 × 1.仮数 × 2^(指数-bias) という形で表される。ここでbias(バイアス)は、指数をマイナスもプラスもまとめて正の数で扱うための「下駄」のようなもの。たとえば単精度なら、記録された指数から127を引いた値が本当の指数になる。

つまり、bias を引き算することで「2の何乗ぶん小数点をずらすか」が決まる、というわけだ。

次に、よく問われる特殊値4種。ふつうの数では表せない状態を専用のビット並びで表現する。

特殊値4種

特殊値意味ビットの特徴
±0符号付きのゼロ全ビット0(符号で±)
±∞無限大指数が全部1・仮数が0
NaN数でない(Not a Number)指数が全部1・仮数が0でない
非正規化数0に近い極小の数指数が全部0

NaNは「0÷0」のような答えの出ない計算の結果として現れる。±∞や非正規化数とあわせて、「指数が全部1か全部0か」で見分けるのがコツだ。

わかりやすく言い換えると

要するに、浮動小数点数は「理科の 3.0×10⁸ をコンピュータ流に書いたもの」だ。

符号 … プラスかマイナスの旗

指数 … 小数点をどこまでずらすか(数の大きさ担当)

仮数 … 中身の数字(細かさ担当)

そして「先頭の1は省略」という節約ワザがある(ケチ表現)。正規化した数は必ず「1.〜」で始まるので、その1は書かずに省き、そのぶん仮数の桁を1つ多く使える。つまり、見えないけれど1が頭にある、というわけだ。


試験のツボ

🔴 一番出る:単精度・倍精度のビット内訳

①単精度=32ビット(符号1・指数8・仮数23)、bias127

②倍精度=64ビット(符号1・指数11・仮数52)、bias1023

🔴 次に出る:特殊値の見分け方

①±∞=指数が全部1・仮数0

②NaN=指数が全部1・仮数0でない

③非正規化数=指数が全部0

🟡 押さえると安定:仮数の先頭1は省略する(正規化)

①「1.〜」の1を書かないぶん精度を1桁稼ぐ

②単精度の精度は10進で約7桁


よくある間違い

「仮数が23ビットだから10進で23桁の精度」→ ✗  省略した先頭1を含めても10進で約7桁。ビット数と10進の桁数は別もの。

「NaNは0と同じ」→ ✗  NaNは「数でない」無効な値。0とはまったく別。

「指数の部分にそのままの指数が入っている」→ ✗  biasを引いた値が本当の指数(単精度は-127する)。


試験での出題パターン

実際の問題でたしかめてみよう。

オリジナル問題1(ビット内訳)

📝 オリジナル問題 1 単精度のビット内訳

IEEE 754の単精度浮動小数点数に関する次の記述のうち、正しいものはどれか。

  1. 単精度は全体で64ビットあり、符号1・指数11・仮数52の内訳で構成されている
  2. 単精度は全体で16ビットあり、符号1・指数5・仮数10の内訳で構成されている
  3. 単精度は全体で32ビットあり、符号1・指数8・仮数23の内訳で構成されている
  4. 単精度は全体で32ビットだが、符号を持たず指数9・仮数23の内訳で構成される
シーピードラ
シーピードラ 解答・解説

解答は 3 だぜ。

単精度は全体で32ビット、内訳は符号1・指数8・仮数23だ。「1・8・23、足して32」とリズムで覚えとけよ。biasは127だな。

選択肢1は倍精度(64ビット・1・11・52)の内訳だ。選択肢2の16ビットは半精度の話で単精度ではない。選択肢4は「符号を持たない」が誤りで、必ず符号ビットが1つあるぜ。

選択肢判定理由
1これは倍精度の内訳
216ビットは半精度
332ビット・符号1指数8仮数23で正しい
4単精度にも符号ビットがある

オリジナル問題2(特殊値)

📝 オリジナル問題 2 特殊値NaN

IEEE 754の特殊値に関する次の記述のうち、正しいものはどれか。

  1. NaNは0÷0などの答えが定まらない計算で現れる「数でない」無効な値のことである
  2. NaNは計算の結果がちょうど0になったことを表す、符号付きゼロの別名のことである
  3. ±∞は指数部が全て0かつ仮数部も全て0のときに表される無限大のことをいう
  4. 非正規化数は指数部が全て1のときに表される、絶対値が非常に大きい数である
シーピードラ
シーピードラ 解答・解説

解答は 1 だぜ。

NaN(Not a Number)は「数でない」無効な値で、0÷0のような答えの定まらない計算で現れる。指数が全部1で、仮数が0でないときがNaNだ。

選択肢2はNaNを符号付きゼロとしている点が誤り。選択肢3は±∞を「指数全0」としているが、正しくは指数全1・仮数0だ。選択肢4の非正規化数は「指数全0」で、極小の数を表すから誤りだぜ。

選択肢判定理由
1NaNは答えの出ない計算で現れる無効値
2NaNはゼロではない
3±∞は指数全1・仮数0
4非正規化数は指数全0で極小の数

オリジナル問題3(仮数の正規化)

📝 オリジナル問題 3 仮数部の正規化と精度

浮動小数点数の仮数部に関する次の記述のうち、正しいものはどれか。

  1. 仮数部のビット数がそのまま10進の有効桁数になり、単精度なら23桁の精度を持つ
  2. 正規化した数は「1.〜」で始まるため先頭の1を省略し、そのぶん精度を1桁分稼ぐ
  3. 仮数部には小数点の位置を表す情報だけが入り、数字そのものは指数部に格納される
  4. 仮数部はビット数を増やしても精度は変わらず、表せる数の範囲だけが広がっていく
シーピードラ
シーピードラ 解答・解説

解答は 2 だぜ。

正規化した数は必ず「1.〜」の形になる。だから先頭の1は省略して書かず、そのぶん仮数の桁を1つ多く使える。これが「ケチ表現」だな。

選択肢1は「ビット数=10進桁数」が誤りで、単精度の精度は10進で約7桁だ。選択肢3は仮数と指数の役割が逆。選択肢4は「精度が変わらない」が誤りで、仮数を増やせば精度(細かさ)が上がるぜ。

選択肢判定理由
1単精度の精度は10進で約7桁
2先頭の1を省略し精度を1桁稼ぐ
3数字は仮数、小数点位置は指数
4仮数を増やすと精度が上がる

まとめ

押さえどころ

次に学ぶ


執筆: SikakuQuest編集部

勉強は、クエストになった。

資格の勉強を、冒険に変えるRPG学習アプリ

App Storeで見る