固定小数点数
出典: フリー百科事典『ウィキペディア(Wikipedia)』
固定小数点数(こていしょうすうてんすう)は、コンピュータにおける実数の近似値の表現方式。固定小数点数では整数部分に用いるビット数と小数部分に用いるビット数をあらかじめ固定して表現する。同じく実数を近似表現する方式で小数点の位置が可変である浮動小数点数に対してこう呼ぶ。固定小数点とも呼ぶが、小数点自体を指すとも取れるため固定小数点数と呼ぶのが一般的。コンピュータで用いられる整数型は、小数部分に用いるビット数をゼロとした固定小数点数としてもとらえることもできる。
通常、実数は「小数点数」ではなく単に「小数」というので、「点数」がつくのは不自然にも見えるが、語の構造としては「固定-小数点数」ではなく「(固定-小数点)数」であり、正しい表現といえる。「固定小数」というと意味が通じなくなる。
目次 |
[編集] 特徴
浮動小数点数に比べて表現できる値の範囲ははるかに狭いが、情報落ちが起こらないことや高速に演算できることが利点に挙げられる。コンピュータグラフィックスで用いられる座標や画素値はある程度値域が限られるため、固定小数点数でも表現することができ浮動小数点数にくらべ高速に計算できるようになる。また、整数どうしの除算の場合にも、整数の逆数を用いた乗算として求めた方が高速であるため、整数の逆数を固定小数点数で表しての計算がよく用いられる。
なお、信号処理を実行するためのデバイスであるデジタルシグナルプロセッサでは、浮動小数点数演算を高速に実行する浮動小数点演算装置 (FPU) が存在しないものが多いため固定小数点数が主に用いられる。パソコンにおいては、演算を行うCPUにFPUが付属するものが主流であるため、浮動小数点数を用いて計算するアプリケーションも多く存在するが、特に高速化が必要なコーデックなどでは固定小数点を用いることもある。
[編集] Q表記(Qフォーマット)
固定小数点数は、小数部分のビット数をQ表記(Qフォーマット)で表す。例えば、小数部分のビット数が12ビットである場合には、Q12表記もしくはQ12フォーマットと呼ばれる。
例えば、1.5をQ1表記で表現すると2進数表記では11である。この表記ではビット0とビット1の間に小数点がある。
注:(1*2^0)+(1*2^-1)=1.5
[編集] 固定小数点演算
固定小数点演算における四則演算においては、加算や減算はそのまま整数同士の加減算として計算できる。しかし、乗算や除算では演算結果の小数点位置が掛けた数の小数点の位置だけずれることになるため、元の小数点位置に戻す場合には乗算では右側(LSB側)へ、除算では左側(MSB側)へシフト演算を行う必要がある。
ここでは例えば、1.5と0.5の加算を考えてみる。1.5、0.5はQ1表記では各々2進数表記で11、01である。これらQ1表記の数(11と01)をそのまま足してみると100となるが、100を元の実数に直すと2.0であるので通常の加算のまま計算できている。次に乗算を考え単純にQ1表記の数(11と01)を掛けてみる。結果は11であるがこれをQ1表記であるとみなして実数に直すと1.5となる。1.5と0.5の乗算結果の正解は0.75であるのでこの解釈は間違いである。乗算では、小数点部分のビット数が、乗算対象となる2つの固定小数点数の小数点部分のビット数の和になる。Q1表記同士であれば、計算後の小数部のビット数は1ビット足す1ビットで2ビットとなる。そのため乗算結果の11はQ2表記として解釈する必要がある。またQ1表記に直す場合には、1ビット右にシフトする必要がある。
また、浮動小数点数にくらべ表現可能な範囲が狭くオーバーフローやアンダーフローが発生しやすいことに注意したほうがよい。
[編集] 固定小数点数の精度
固定小数点数は2進表記、有限桁であるゆえに丸め誤差や打ち切り誤差は免れない。
たとえば、2進法である場合、各ビットの重みは2の倍数となっており、1/5 のような値を2進数に直そうとすると循環小数となり有効桁数が不足した分は丸め誤差となって現れる。
これらの誤差のうち、10進数を表現しようとするときの丸め誤差だけはBCD(二進化十進数)を用いることで回避できる。これを10進固定小数点数などという。BCDでは各桁の重みが10の累乗であるため、1/5 を誤差なしに表せる。
[編集] 関連項目
カテゴリ: コンピュータの仕組み | コンピュータのデータ | プログラミング | 数の表現