数値フォーマットは図1に示した通りです。数値を「符号+固定小数点値(1.0〜2.0)×2N」のようにコード化します。
符号部は1ビットで0が「正」で、1が「負」です。単精度指数部(8ビット)はげた履き表現(バイアスまたはエクセス)と呼ばれる形式であり、実際の値に、バイアス値(127)を加算したものになります。
指数部はバイアスされて常に正の値となるような形式となり、浮動小数点数同士の比較を単純にしています。単精度での指数レンジは、−126〜+127に127を加えて、1〜254となります、0と255は予約済みの値(特別な意味を持つ値)です。最後にはバイアスを減算して実際の指数を求めます。
例として単精度で−7を表記してみましょう。負数なので、符号=1です。7を分解すると次のようになります。
7=1.75×4=(1+1/2+1/4)×4
=(1+1/2+1/4)×22=(1+2−1+2−2)×22
指数は2にバイアスの127を加えるので次のようになります。
2+127=129=0b10000001
仮数は小数点の右側だけなので、足りないビットの分は0で埋めて23ビットにします。
仮数=2−1+2−2=0b11000000000000000000000
これらの結果から、次のように表記されます。
2進値:0b 1 10000001 11000000000000000000000
16進値:0×C0E00000
FPUを使うと「実数」(C言語 float型)を無限に取り扱うことができるので、高度なアプリケーションへの対応が可能になります。FPUがない場合は、ソフトウェアによるエミュレーションが必要になります。この場合、固定小数点に移行するためのスケーリング処理と、飽和に関する問題のハンドリングのため、アルゴリズムの作り替えと固定小数点の実装が必要となり、かなり複雑なプログラムになります。
FPUがあると、ハイレベルデザインツール(MATLAB/Simulinkなど)の使用が容易になり、高度なアプリケーションの開発が可能になります。
Copyright © ITmedia, Inc. All Rights Reserved.