代碼 [GCC,以-02標誌編譯]正確性CMATH的戰俘()在GCC
int main()
{
vector< vector<int> > matrixa(8);
int ff = 5;
int s = pow(ff, matrixa.size());
int ss = pow(double(ff), int(matrixa.size()));
vector< vector<int> > comb(s);
cout << ff << "^" << matrixa.size() << " = " << s << endl;
cout << ss << endl;
return 0;
}
輸出
5^8 = 390624
390625
我不知道爲什麼s = 390624
時,它應該是390625
。如果我編譯沒有-O2標誌的代碼,那麼s = 390625
。此外,ss
的鑄件似乎可以糾正該問題。
這是怎麼回事?
我的操作系統是Windows 7旗艦版64位。不知道GCC版本,它帶有Code :: Blocks 10.05。
我認爲,來了一個4.4.1 IIRC。 – chris 2012-07-12 16:14:45
'雙POW(雙,INT)'除去在C++ 11順便說一句 – 2012-07-12 16:16:31
正確地工作這裏(GCC-4.5.1和Linux)。 – 2012-07-12 16:16:33