为什么gcc编译器输出pow(10,2)为99而不是100?

Alo*_*rya 3 c++ gcc

#include <iostream.h>
#include <math.h>
int main()
{
    int j=2;
    int output;
    output=pow(10,j);
    cout<<output;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我把上面的代码写到gcc 12编译器,得到输出99而不是100.我在搜索各种网站时没有得到正确的理由.有编译器问题吗?

yiz*_*lez 8

因为整数截断.pow()返回一个浮点值,由于浮点运算,它可能是〜99.999...; 但是,由于整数截断,甚至99.999...会被截断为99.

  • @rsethc,这种舍入方法有问题.只需使用`std :: round`. (3认同)
  • 这很可能是这种情况,因此在这种情况下,为了获得更“正确”的整数,您可以对 pow() 的结果进行四舍五入。`int result = pow(10^2) + 0.5;` 就可以了。 (2认同)
  • 我得到了pow(10,2)= 100但是如果我声明j = 2然后在评估pow(10,j)时我得到99.为什么它如此然后如果它只返回浮点值,它必须坚持相同两种情况都回答? (2认同)