gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:11:08 24 4
gpt4 key购买 nike

代码 [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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com