コンピュータが扱うデータの形式の1つ。
数値を、(-1)符号×仮数×基数指数 の形で表現することで、整数だけではなく実数も含めて効率よく表現出来る様にしたデータ型。 浮動小数点数には幾つかの方法があるが、 最も一般的であるといわれているIEEE754の32ビット単精度の方法。
物凄く大雑把には、
コンピュータ内においてプログラムやデータを操作する際の単位を語(ワード)といい、
主記憶装置の各々の番地(アドレス)には一語が記憶出来る。
一語の大きさはコンピュータによって8ビット、16ビット、32ビット、など、色々ある。
また、プログラム言語のデータ型には様々な種類とその為に必要な大きさがある。
例えば、一語が16ビットのコンピュータCOMETにおいて、32ビットが必要なIEEE754を使用する場合は、
1つのデータを記憶するために2語が必要となり、正しくデータを処理するための対応も必要となる。
COMETにそんな言語処理系が有るのかどうかは知りませんが。
32ビットのうち、
左端の水色の1ビットは符号部。正の数なら0、負の数なら1。
左から2ビット~9ビット目の緑色の8ビットは指数部。基数は2。
ビット列00000000と11111111は特別な意味を持つため指数としては使わない。
指数としての値は、十進数の-126から127までの範囲を扱う(プラスの方が多い)が、
二進数の補数によるマイナスの数の処理が面倒なため、
便宜上、指数としての値に十進数の127を加え、
全て符号なし二進数のプラスの値(十進数の1から254)にするイクシス表現であらわされる。
左図参照。
残りのオレンジ色の23ビットは仮数部。
このデータ形式では、数値の符号は符号部で判るので、
より多くの値が扱える様に数値の絶対値を使う。
また、例えば二進数の1010は、
1010×20、101.0×21、
0.1010×24、10100×2-1、など、幾つもの表現が出来てしまい不都合なので、
整数部分は必ず1にして有効桁を最大限に使える1通りに限定し(これを正規化と言う。1.010×23となる)、
さらに、その整数部分は必ず1であることを了解事項として省略することで、実質24ビット分を表現する事が出来る。
10進数の-118.625という数値をこのデータ形式で表現する。
この値の絶対値である118.625を符号なしの2進数に変換する。
1110110.101
整数部分が1になる様にする(正規化)。
1.110110101×26
これを、あてはめていく。
数値の符号は負なので、符号部は、1。
指数部は、6に127を加えた133を二進数に変換して、10000101
仮数部は、小数点以下の部分、110110101をあてはめ、残りのビットは0にする。
浮動小数点数で、
絶対値の差が極めて大きい値を加算する際に、細かい方の値がなくなってしまうこと。
面倒なので十進数、有効桁数が8桁の例。
100000+0.001=100000.001
浮動小数点数で、
殆ど等しい数値同士の減算を行った際に、有効桁数が減ってしまうこと。
面倒なので十進数、有効桁数が8桁の例。
√1001-√999
=31.638584-31.606961 (有効桁数同士の減算)
=0.031623
解決法
(√1001-√999)(√1001+√999)/(√1001+√999)
=(1001-999)/(31.638584+31.606961)
=2/63.245545
=0.031622781・・・
割り算なので、桁数が少なくならない。