所以我参加了一场计算比赛,我注意到了一个奇怪的错误。pow(26,2) 总是返回 675,有时返回 674?即使正确答案是 676。这类错误也会发生在 pow(26,3)、pow(26,4) 等上。经过比赛后的一些调试,我相信答案与 int 向下舍入的事实有关。有趣的是,我以前从未发生过这种错误。我的计算机在 Windows 8 上运行 mingw。GCC 版本相当新,我相信 2-3 个月大。但我发现,如果我将 o1/o2/o3 优化标志打开,这些错误会奇迹般地消失。pow(26,2) 总是会得到 676 又名正确答案 谁能解释为什么?
#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