float の悪夢。。。 2

float の悪夢。。。の続き。

再現するコードができました。


float a = 10;
float b = 10;
void CcalcfloatDlg::OnBnClickedOk()
{
FILE* f = fop en ("c:\\debug.txt", "a+");
if(f)
{
#ifdef _DEBUG
fprintf(f, "DEBUG\n");
#else
fprintf(f, "RELEASE\n");
#endif
float c = a / (b / 1000.0f);
fprintf(f, "%f\n", c);
fclose(f);
}
}


ちなみに、a, b をローカル変数にした場合は、問題が出ませんでした。
これの結果は、以下のとおり

RELEASE
999.999953
DEBUG
1000.000000


原因は最適化ですかね?
最適化を無効にすると、DEBUGと同じ結果となります。
困るな~
最適じゃないじゃん。
[PR]
by isoq | 2007-09-27 18:47 | C/C++/Win32
e87.com(千趣会イイハナ) 花を贈るなら日比谷花壇
<< float の悪夢。。。 3 float の悪夢。。。 >>