【发布时间】:2012-12-08 05:49:21
【问题描述】:
所以我参加了一个计算竞赛,我发现了一个奇怪的错误。 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
【问题讨论】:
-
pow(26,2)如 26*26 = 676? -
是的,pow 与标准幂函数一样。
-
请重新检查并将代码修正为正确的错误数字。