創屋ぷれす

けた落ち・情報落ちとは

■ 浮動小数点数
コンピュータで小数を扱う形式の1つで、少なくともメジャーなプログラミング言語では標準のデータ型として用意されています。最も広く採用されている規格はIEEE754で標準化されているものです。

浮動小数点数ではデータ型で固定されたbit数(C言語のfloatは32bit, doubleは64bitなど)を下記3部に分けて数値を表現します。
・符号部
・仮数部
・指数部

しかし、現実の小数を固定された(有限の)bit数の中で表現することは出来ないので誤差がでます。
けた落ち・情報落ちとは、その誤差の種類です。

■ 正規化
浮動小数点では仮数部は固定bit数で表現するため、
0だけの上位の桁は指数部で表現し、仮数部を繰り上げるような形になります。
数値を10進数で表現し・仮数部の最大桁数が3桁(0.は含まない)とすると、

0.123 => 0.123 * 10^(0)
0.012 => 0.120 * 10^(-1)
0.001 => 0.100 * 10^(-2)

となります。

■ けた落ち
数値を10進数で表現し・仮数部の最大桁数が3桁(0.は含まない)とすると、
0.123 – 0.122 = 0.001 ← 有効桁が3桁から1桁になり…
0.001 => 0.100 * 10^(-2) ← 正規化されます

けた落ちと正規化により有効桁に”どこからともなく”0が含まれるようになる事で、
その後の演算結果に影響するようになります。

■ 情報落ち
数値を10進数で表現し・仮数部の最大桁数が3桁(0.は含まない)とすると、
例えば 0.123 と 0.00123 という数値は個々では仮数部を”0.123″と表現できます。
0.123 = 0.123 * 10^(0)
0.00123 = 0.123 * 10^(-2)

しかし、2つの数値を加算する場合は指数を揃えて計算するため…
0.123 => 0.123
0.00123 => 0.001
0.123 + 0.001 = 0.124
…となり、期待する0.12423とは0.00023の誤差が生じます。

Comments are closed.