所以我參加了一個計算競賽,我發現了一個奇怪的錯誤。戰俘(26,2)總是會返回675,有時是674?即使正確的答案是676.這些類型的錯誤也發生在pow(26,3),pow(26,4)等 在比賽結束後進行一些調試後,我相信答案與事實int下降有關。有趣的是,這種錯誤以前從未發生過。我的電腦在Windows 8上運行mingw。GCC版本相當新,像2-3個月我相信。但是我發現如果我把這些錯誤的o1/o2/o3優化標誌奇蹟般地消失了。戰俘(26,2)總是會得到676 aka正確的答案任何人都可以解釋爲什麼?GCC C++ pow精確度
#include <cmath>
#include <iostream>
using namespace std;
int main() {
cout<<pow(26,2)<<endl;
cout<<int(pow(26,2))<<endl;
}
帶雙打的結果很奇怪。
double a=26;
double b=2;
cout<<int(pow(a,b))<<endl; #outputs 675
cout<<int(pow(26.0,2.0))<<endl; # outputs 676
cout<<int(pow(26*1.00,2*1.00))<<endl; # outputs 676
'pow(26,2)'如26 * 26 = 676? –
是的,功率在標準功率函數。 –
你可以發佈你的代碼嗎?我不確定你是如何得到這些值的。 –