float の悪夢。。。 3

float の悪夢。。。 2

やはり最適化が原因でした。
最適化のありなしで、次のようにコードが変わります。

--- DEBUG ---
float c = a / (b / 1000.0f);
00411CC9 fld dword ptr [b (42EB44h)]
00411CCF fdiv dword ptr [__real@447a0000 (42A0CCh)]
00411CD5 fdivr dword ptr [a (42EB40h)]
00411CDB fstp dword ptr [c]
00411CDE fld dword ptr [c]
00411CE4 fstp qword ptr [esp]


--- RELEASE ---
float c = a / (b / 1000.0f);
00401019 fld dword ptr [b (40B044h)]
00401022 fmul dword ptr [__real@3a83126f (409100h)]
00401028 fdivr dword ptr [a (40B040h)]
0040102E fstp qword ptr [esp]


うーん、、、
なかなか最適化されていますな。
。。。

結局、#pragma で演算部分だけを別関数にして最適化を無効にする事で解決。

#pragma optimize("", off)
inline float calc(float d, float e)
{
return d / (b / 1000.0f);
}
#pragma optimize("", on)


もっと根本的な解決方法は無いものか。。。
[PR]
by isoq | 2007-09-28 10:42 | C/C++/Win32
e87.com(千趣会イイハナ) 花を贈るなら日比谷花壇
<< オオクワ float の悪夢。。。 2 >>