6

这就是我的意思

 double x=1.1402
 double pow=1/3;
 std::pow(x,pow) -1;

结果为 0 但我预计为 0.4465

等式是 (1 + x) ^3= 1.1402,找到x

4

4 回答 4

21

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;

}
于 2009-10-16T20:52:09.603 回答
12

1/3作为整数算术完成,因此您将 0 分配给pow. 尝试pow(x, 1.0/3.0);

于 2009-10-16T20:52:56.043 回答
9

许多人说 1/3 = 0,但没有解释为什么会这样。

C 和 C++ 将根据操作数的类型执行操作。由于两个操作数都是整数,因此它会执行整数除法来创建整数结果。当它被强制将该整数结果分配给一个双精度变量时,它会将整数 0 转换为双精度 0.0。

没有必要将两个操作数都设为双精度,如果其中一个是双精度,编译器也会在执行操作之前将另一个操作数转换为双精度。1.0/3 或 1/3.0 都将返回您预期的结果,1.0/3.0 也是如此。

于 2009-10-16T21:05:40.920 回答
1

你的 1/3 是整数除法,整数除法的结果是 0。

于 2009-10-16T20:53:17.420 回答