浮動小数点数
浮動小数点数とは
浮動小数点数とは、コンピュータにおける数値を表現する方法の一つで、主に小数点を含む数値を表現するときに利用されています。
浮動小数点数は次のように「符号(正の数が0、負の数が1)」「指数部」「仮数部」の形式で表現します。※32ビットの例
例えば、10進数の「0.01」を2進数に変換すると「0.000000101000111101011100・・・」です。
スポンサーリンク
この数値に対して、小数点の位置を調整し最上位桁を0以外にします。この作業を「正規化」といいます。
0.000000101000111101011100・・・
↓正規化
0.101000111101011100001010 × 2^-6
正規化された数値は、小数点以下が仮数部、2^nのnが指数部をあらわします。
そして、この正規化された数値を浮動小数点数の形式にはめ込んでいけば完成です。
※指数部は次の様に2を基数として負の数は2の補数で表現します。
00000110 ← (6)
↓すべてのビットを反転
11111001
↓1を加算
1111010 ← (-6)※2の補数
IEEE754の浮動小数点数
IEEE(米国電気電子学会)により規格化された、浮動小数点数形式のことを「IEEE754」といいます。
IEEE754の浮動小数点数は次の形式で表現します。※32ビットの例
この形式では、仮数部を1.×××の形であらわします。
例えば、先ほどと同様に10進数の「0.01」を2進数に変換し、IEEE754で正規化すると次のように「1.×××」の形で正規化します。
0.000000101000111101011100・・・
↓正規化(IEEE754)
1.01000111101011100001010 × 2^-7
さらにIEEE754では、指数部にバイアスと呼ばれる数値127を加算します。バイアスには「ゲタをはかせる」(ゲタ履き表現)という意味があり、指数部にバイアスを加算することで、負の数を含む表現が正の数だけであらわせるようになります。
今回の例では、指数部は「-7」なので「-7」にバイアスの「127」を加算します。
-7 + 127 = 120
↓ 2進数に直す
01111000
そして、この正規化された数値を浮動小数点数の形式にはめ込んでいけば完成です。
浮動小数点数と誤差
浮動小数点数では、表現できる数の範囲が決まっています。例えば32ビット形式の浮動小数点数では、仮数部で表現できるビットは24ビットです。(IEEE754は23ビット)
例えば、2進数「0.00011001100110011001100110011...」(10進数の0.1) のように割り切れなくて無限に続く小数である「無限小数」などは「決められた範囲」に収まりません。
そこで、コンピュータはこれらの数をあらわす時「なるべく近い値」を使用します。その結果、実際の値と誤差が生じてしまいます。
コンピュータで発生する誤差には次のような種類があります。
誤差の種類 | 説明 |
丸め誤差 | 「表現できる数の範囲」(有効桁)を超えてしまった際に有効桁以降を切り捨てることによって発生する誤差。 |
打ち切り誤差 | コンピュータの計算処理を途中で打ち切ることにより発生する誤差。 |
桁落ち | 値がほぼ等しく丸め誤差を持つ数値の差を求めた時に発生する誤差。 |
情報落ち | 大きい値と小さい値の数値を和もしくは差を求めた時に発生する誤差。 |