浮動小数点数とは

浮動小数点数(ふどうしょうすうてんすう)とは、小数点の位置を固定せず、数値の大きさに応じて左右に「浮動(移動)」させて表す数値の表現方法です。数値を「仮数(数値の並び)」と「指数(小数点の位置を表す累乗)」という2つの部分に分けて保持します。この方法を使うと、非常に小さなミクロの値(例:0.000000123)から、宇宙規模の非常に大きな値(例:123000000000)まで、限られた桁数の中で極めて広い範囲の数値を表現することができます。現代の一般的なコンピュータやスマートフォンでの科学技術計算、3Dグラフィックスの描画などでは、この浮動小数点数が主流として使われています。
具体例
私たちが理科の授業などで使う「1.23 × 10の5乗」という表記法が、まさに浮動小数点数の考え方と同じです。
「123000」を表す場合:
仮数部を「1.23」、指数部を「5」として、
1.23 × 10の5乗 と表現します。
「0.000123」を表す場合:
仮数部を「1.23」、指数部を「-4」として、
1.23 × 10のマイナス4乗 と表現します。
このように、数値の絶対値に合わせて小数点の位置(指数)を動かすことで、無駄な「0」を並べることなく、効率的に広い範囲の数値を表すことができます。
もう少し詳しく
コンピュータ内部において、浮動小数点数は現在「IEEE 754」という国際的な標準規格に従って表現されるのが一般的です。この規格では、数値を「符号部(プラスかマイナスか)」「指数部(小数点の位置、すなわち2の何乗か)」「仮数部(具体的な数値の並び)」の3つのブロックに分けてビットを割り当てます。例えば単精度(32ビット)と呼ばれる形式では、符号に1ビット、指数部に8ビット、仮数部に23ビットを割り当てます。
浮動小数点数の非常に重要なルールとして「正規化(せいきか)」という操作があります。これは、仮数部の表現方法を「必ず1.xxxxの形になるように小数点の位置を調整する」というルールです。たとえば「0.00101(2進数)」というデータがあったら、小数点を右に3つずらして「1.01 × 2のマイナス3乗」という形に整えます。さらに、2進数で正規化すると整数部分は絶対に「1」になるため、この「1」を省略して保存しない(ケチ表現、または隠みビットと呼びます)ことで、限られたビット数の中で仮数部に1ビット分多く情報を詰め込み、精度を高める工夫がなされています。
一方で、浮動小数点数は万能ではありません。限られた桁数に収めるために、10進数ではキリの良い「0.1」のような数字であっても、2進数に変換すると無限に続く循環小数となり、仮数部の途中でバッサリと切り捨てられ(丸められ)てしまいます。そのため、プログラミングにおいて「0.1 + 0.2」を計算すると、結果が「0.3」ではなく「0.30000000000000004」のようになってしまうことがあります。これを浮動小数点数の計算誤差と呼びます。
試験でのポイント
試験では、浮動小数点数の計算に伴って発生する様々な「誤差」の種類が頻繁に問われます。必ず整理して覚えておきましょう。
代表的なものに以下の3つがあります。
1. 「丸め誤差」:表現できる桁数に収まらない部分を四捨五入や切り捨てすることで生じる誤差。
2. 「情報落ち」:絶対値が非常に大きい数と、非常に小さい数を足し引きしたときに、小さい方の値が無視されて消えてしまう誤差(例:1億 + 0.001 = 1億 となってしまう)。
3. 「桁落ち」:値がほぼ等しい2つの数を引き算した際に、有効な桁数が極端に減ってしまう現象(例:1.2345 - 1.2344 = 0.0001 となり、有効な数字が1桁になってしまう)。
これらの誤差の名前と発生するシチュエーションを正しく結びつけて解答できるようにしておくことが、最も重要な対策となります。
関連する用語
対照的な表現方法である固定小数点数や、コンピュータ特有の弱点である丸め誤差、情報落ち、桁落ちといった様々な誤差に関する用語と密接に関連しています。