为什么 C++ 认为 8^1/3 = 1?

Why does C++ think 8^1/3 = 1?

我正在用 C++ 测试 pow() 函数

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    cout << pow(8,(1/3)) << endl;
    return 0;
}

出于某种原因,这 returns 1. 为什么会这样?

这是因为 1/3 是以整数计算的。除法的结果是 0,所以 pow(x, 0) 产生 1.

像这样将分组改为双打分组:

cout << pow(8,(1.0/3)) << endl; // prints 2 as expected

Demo.

1/3 产生整数结果 0

当您使用整数作为 pow() 函数的输入时,计算机会截断输出。如果您输入浮点数,错误将得到纠正

幂(8, 1/3) = 1

pow(8.0, 1.0/3) = 2