固定小数点数の解説(基本情報技術者シラバス用語)

固定小数点数の解説(基本情報技術者シラバス用語)
目次

固定小数点数とは

固定小数点.png

固定小数点数(こていしょうすうてんすう)とは、コンピュータで小数を扱う際に、小数点の位置をあらかじめ特定の場所に固定しておく数値の表現方法です。例えば、「常に下から2桁目の左側に小数点がある」と決めておけば、整数と同じ仕組みを使って小数の計算を行うことができます。この方式は、小数点の位置を管理するための余計な計算が不要なため、計算速度が非常に速いという特徴があります。その一方で、表現できる数値の範囲(非常に大きな数や、逆に非常に小さな数)が狭くなってしまうという制限があります。そのため、速度が最優先されるリアルタイムの処理や、お金の計算のように小数点以下の正確さが厳密に求められるシステムで用いられます。

具体例

例えば、お金の計算において、常に小数点以下2桁までを記録するルールを考えます。

「12.34」という小数を、小数点を固定して「1234」という整数として記録します。
「5.67」を「567」として記録し、足し算を行います。
1234 + 567 = 1801
結果の「1801」に対し、決めておいた位置に小数点を戻して「18.01」とします。

このように、内部的にはただの整数として扱いながら、最後に小数点を戻すことで高速かつ正確に小数を計算することができます。

もう少し詳しく

コンピュータのプロセッサ(CPUなど)の内部構造において、固定小数点数の計算は、整数を処理するための回路(ALU:算術論理演算装置)をそのまま使い回すことができるという絶大な強みを持っています。小数点の位置がどこにあるかは、あくまでプログラムを書く人間やソフトウェア側の「約束事」として管理され、ハードウェア側からは単なる整数のビット列として見えています。
例えば、16ビットのデータのうち、上位8ビットを整数部分、下位8ビットを少数部分と見なす(これをQフォーマットなどと呼びます)と決めておけば、加算や減算は普通の整数と同じように足し引きするだけで正確な結果が得られます。掛け算や割り算を行った後だけ、ずれてしまった小数点の位置をシフト演算で元の位置に調整する処理を挟みます。
このような特性から、複雑な浮動小数点演算ユニット(FPU)を搭載できない安価なマイコンや、消費電力を極限まで抑えたい組み込みシステム、あるいは音声データなどの信号処理(DSP)をミリ秒単位の超高速で処理しなければならない場面で、固定小数点数は現在でも非常に重要な技術として活用されています。また、浮動小数点数で発生する「丸め誤差」を嫌う金融機関のシステムや会計ソフトにおいても、金額を扱う際には固定小数点の考え方(あるいは10進数のまま計算するBCD演算など)が採用されることが一般的です。

試験でのポイント

情報処理技術者試験では、固定小数点数はしばしば「浮動小数点数」との対比問題として出題されます。両者のメリットとデメリットを明確に区別して覚えることが得点のカギです。具体的には、「固定小数点数は計算速度が速く精度が安定しているが、表現できる数値の範囲(ダイナミックレンジ)が狭い」こと、逆に「浮動小数点数は表現できる範囲は圧倒的に広いが、計算が複雑で速度が落ちやすく、微小な誤差が発生する可能性がある」ことをセットで記憶しておきましょう。
また、固定小数点数において、計算結果が用意されたビット数(桁数)を超えてしまう現象である「オーバーフロー(桁あふれ)」についても問われることがあります。小数点の位置が固定されている分、表現できる最大値が小さくなりがちであるため、プログラムを設計する際にはオーバーフローが発生しないように十分なビット幅を確保するなどの注意が必要である点も、実践的な知識として問われやすいポイントです。

関連する用語

対極の概念として必ず比較される浮動小数点数や、計算結果が桁数に収まらなくなるオーバーフロー、データを効率よく処理するためのシフト演算などと併せて学習すると効果的です。

読んだ内容を10問練習と実技で確認

記事で理解した用語を、StudyQuestの演習とクラウド実技ラボで定着させます。

10問練習 実技ラボ