浮動小数点数
読み:ふどうしょうすうてんすう
外語:floating point number
浮動小数点
の形式で表現される数値のこと。この形式では、数値は仮数×基数の指数乗、つまりf×r
e
の
指数表記
形式(fは
仮数部
、rは基数部、eは
指数
)で表現される。
目次
概要
特徴
メモリーへの格納
精度
単精度
倍精度
4倍精度
表現方法
構造
各部の状態
概要
指数形式とは、具体的には123456を0.123456×10の6乗、のようにして数値を扱うことをいい、それぞれ「123456」を仮数部、「6」を
指数部
、「10」を基数という。
基数は10、16、2のいずれかが主だが、標準規格の
IEEE 754
は精度を問わず2を基数としている。基数が2の場合、それは即ち10進数計算ではないため、10進数では有限小数になる値でも浮動小数では正確に表現できず、何らかの誤差が生じる可能性がある。
特徴
メモリーへの格納
演算結果はメモリーに格納する必要があり、プログラムから触れる必要もあるため、数値の格納のされ方はプロセッサーごとに、仕様として明確に決められている。
一般には、最上位ビットから順に、次のように格納されることが多い。
符号(s)
指数部(e)
仮数部(f)
指数部は一定の値を加えて非負になるようにする場合(バイアス方式、ゲタばき表現)と、
2の補数
表現をそのまま使用する場合がある。
基数は計算中に変動することがないため存在せず、何を使うかはあらかじめ仕様として決められ、固定化されている。
精度
値の保存に使用する全体のビット数により、単精度(32ビット)・倍精度(64ビット)・4倍精度(128ビット)などと呼び分けることもある。
単精度
単精度は最もよく使われるもので、様々なものがある。
IEEE 754では単精度で符号1ビット+指数部8ビット+仮数部23ビットで、2を基数とし、指数部に+127のゲタをはかせるバイアス方式である。IEEEの単精度の数値範囲は、絶対値で1.40129846e-45〜3.40282347e38の範囲となる。
その他、符号1ビット+指数部7ビット+仮数部24ビットとし、16を基数とする実装もある。
倍精度
倍精度の場合、IEEE 754では符号1ビット+指数部11ビット+仮数部52ビットで、1023のゲタをはかせる。
数値範囲は、絶対値で4.940656458412465d-324〜1.797693134862316d+308となる。
4倍精度
4倍精度の場合、IEEE 754では符号1ビット+指数部15ビット+仮数部112ビットで、16383のゲタをはかせる。
数値範囲は、絶対値で6.4751751194380251109244389582276465q-4966〜1.1897314953572317650857593266280070q+4932となる。
表現方法
構造
例えば、十進数で1357を表現すると、次のようになる。
1357=1.357×10
3
この場合、「1.357」が仮数部、「10」が底、「3」が指数部となる。
これを二進数で表現すると、次のようになる。
(1357)
10
=(10101001101.)
2
=1.0101001101×2
10
この場合、「1.0101001101」が仮数部、「2」が底、「10」が指数部となる。
ここではIEEE 754の単精度を用いることとし、符号1ビット、指数部8ビット、仮数部23ビットと仮定する。
符号は、正なら0、負なら1、となる。
指数部は8ビットの二進数。-127〜128までを表わすため、+127を加算した値とする(バイアス方式)。
仮数部は、左側が必ず「1.」となるよう正規化されるので、これは略し、小数点以下のみを扱うこととする。仮数部は23ビットだが、実質24ビットの精度があることになる。
従って、次のようになる。
(1357)
10
=1.0101001101×2
10
指数部=10+127=137=(10001001)
2
符号1
指数部8
仮数部23
0
10001001
01010011010000000000000
各部の状態
値0は、指数部(e)=仮数部(f)=0で表現する。また指数部(e)=0は正規化されてないことを現わす。
正数は符号(s)=0、負数は符号(s)=1で表わす。従って-0という値もありうる(単精度なら0x80000000が-0.0e+00になる)。
IEEE 754では指数部(e)がALL1(単精度ではe=0x7fまたは0xff)の場合、数値ではない特殊な値を表わす。この条件でかつ仮数部(f)=0の場合は∞、それ以外の場合は
NaN
(非数値)となる。いずれも符号(s)は有効なので、±∞、±NaNが存在することになる。
再検索