这就是我的意思
double x=1.1402
double pow=1/3;
std::pow(x,pow) -1;
结果为 0 但我预计为 0.4465
等式是 (1 + x) ^3= 1.1402
,找到x
。
这就是我的意思
double x=1.1402
double pow=1/3;
std::pow(x,pow) -1;
结果为 0 但我预计为 0.4465
等式是 (1 + x) ^3= 1.1402
,找到x
。
1/3 是 0。这是整数除法。
尝试:
double pow = 1.0 / 3.0;
为了:
#include <iostream>
#include <cmath>
int main(void)
{
double x = 1.1402;
double pow = 1.0/3.0;
std::cout << std::pow(x, pow) - 1;
}
1/3
作为整数算术完成,因此您将 0 分配给pow
. 尝试pow(x, 1.0/3.0);
许多人说 1/3 = 0,但没有解释为什么会这样。
C 和 C++ 将根据操作数的类型执行操作。由于两个操作数都是整数,因此它会执行整数除法来创建整数结果。当它被强制将该整数结果分配给一个双精度变量时,它会将整数 0 转换为双精度 0.0。
没有必要将两个操作数都设为双精度,如果其中一个是双精度,编译器也会在执行操作之前将另一个操作数转换为双精度。1.0/3 或 1/3.0 都将返回您预期的结果,1.0/3.0 也是如此。
你的 1/3 是整数除法,整数除法的结果是 0。