ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

浮動小数点数の比較

二つの浮動小数点数を比較するとき、次のようなコードを書いてはいけない。

float a;
float b;

if ( a == b ) // 間違ったコード
{
}

浮動小数点数では誤差が含まれるので、これでは正しく判定されない。正しく判定するには二つの値の差の絶対値がある一定値より小さかったら等しいとすればよい。
このとき、その一定値として、イプシロンという値を用いることが出来る。Cでfloatの場合は次のように定義されている。

#define FLT_EPSILON         1.19209290E-07F

これを使って先ほどのコードを書き直すと、次のようになる。

float a;
float b;

if ( fabs(a-b) < FLT_EPSILON )
{
}

C#の場合は、Single.Epsilonフィールドとして定義されていて、値は1.4e-45となっている。