c++ - GCC 中 cmath 的 pow() 的正确性

标签 c++ math gcc g++

代码 [GCC,使用 -O2 标志编译]

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 Ultimate x64。不确定 GCC 版本,它带有 Code::Blocks 10.05。

最佳答案

因为浮点运算并不完美,当你这样做的时候

int s = pow(ff, matrixa.size());

pow 的结果实际上更像 390624.99999,当您将它截断为 int 时,它实际上被扁平化为 390624。如果你期望那里有一个整数值(一个带有 .0 小数部分的 float ),你应该四舍五入 pow 的结果。

关于c++ - GCC 中 cmath 的 pow() 的正确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11456104/

相关文章:

c++ - 检查输入和 sleep boost 线程

c# - 布娃娃关节角度约束

java - 逻辑错误导致 if 语句不起作用

gcc - 链接静态库不等同于链接其对象

c - 动态库文件的全局变量加载到哪里了?

c++ - 如何处理 float 溢出?

c++ - 函数的 C/C++ 内存管理

c++ - 如何获得几个 chrono::time_points 的平均值

python - 限制 python 仅使用实数空间

c++ - 变量不能出现在常量表达式中