丸め誤差
本来は無限小数で表現すべき数を有限小数で表現したことにより計算結果が本来の値からずれてしまう現象。
例:1/9*9=0.99999・・・(桁数は適当)
2進法の有限小数で表現できる小数は非常に少ないため、少数の演算時には頻繁に発生する。
例:double a = 48.40; // aは48.39999999・・・(桁数は適当)
上記は48.40という値自体を保持できないことを意味している。つまり、48.40という数値を直接プログラム内で使用することができない。
例:double a = 48.40;
if(a == 48.40){
TRACE("等しい\n"); //←ここにくることはない
}
このような状況が様々な少数において発生するわけである。
例:1/9*9=0.99999・・・(桁数は適当)
2進法の有限小数で表現できる小数は非常に少ないため、少数の演算時には頻繁に発生する。
例:double a = 48.40; // aは48.39999999・・・(桁数は適当)
上記は48.40という値自体を保持できないことを意味している。つまり、48.40という数値を直接プログラム内で使用することができない。
例:double a = 48.40;
if(a == 48.40){
TRACE("等しい\n"); //←ここにくることはない
}
このような状況が様々な少数において発生するわけである。
2006年05月19日(金) 19:29:02 Modified by n0gam0ga