浮動小数点数
読み:ふどうしょうすうてんすう
外語:floating point number

 浮動小数点の形式で表現される数値のこと。この形式では、数値は仮数×基数の指数乗、つまりf×re指数表記形式(fは仮数部、rは基数部、eは指数)で表現される。
目次

概要
 指数形式とは、具体的には123456を0.123456×10の6乗、のようにして数値を扱うことをいい、それぞれ「123456」を仮数部、「6」を指数部、「10」を基数という。
 基数は10、16、2のいずれかが主だが、標準規格のIEEE 754は精度を問わず2を基数としている。基数が2の場合、それは即ち10進数計算ではないため、10進数では有限小数になる値でも浮動小数では正確に表現できず、何らかの誤差が生じる可能性がある。

特徴

メモリーへの格納
 演算結果はメモリーに格納する必要があり、プログラムから触れる必要もあるため、数値の格納のされ方はプロセッサーごとに、仕様として明確に決められている。
 一般には、最上位ビットから順に、次のように格納されることが多い。
  1. 符号(s)
  2. 指数部(e)
  3. 仮数部(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×103
 この場合、「1.357」が仮数部、「10」が底、「3」が指数部となる。
 これを二進数で表現すると、次のようになる。
(1357)10=(10101001101.)2
 =1.0101001101×210
 この場合、「1.0101001101」が仮数部、「2」が底、「10」が指数部となる。
 ここではIEEE 754の単精度を用いることとし、符号1ビット、指数部8ビット、仮数部23ビットと仮定する。
 符号は、正なら0、負なら1、となる。
 指数部は8ビットの二進数。-127〜128までを表わすため、+127を加算した値とする(バイアス方式)。
 仮数部は、左側が必ず「1.」となるよう正規化されるので、これは略し、小数点以下のみを扱うこととする。仮数部は23ビットだが、実質24ビットの精度があることになる。
 従って、次のようになる。
 (1357)10=1.0101001101×210
 指数部=10+127=137=(10001001)2
符号1指数部8仮数部23
01000100101010011010000000000000

各部の状態
 値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が存在することになる。

再検索