这就是我的意思
double x=1.1402
double pow=1/3;
std::pow(x,pow) -1;
结果为0但我期望0.4465
等式为(1 + x) ^3= 1.1402
,找到x
。
答案 0 :(得分:19)
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 :(得分:12)
1/3
以整数运算方式完成,因此您将{0}分配给pow
。试试pow(x, 1.0/3.0);
答案 2 :(得分:6)
C和C ++将根据操作数的类型执行操作。由于两个操作数都是整数,因此它执行整数除法,从而创建整数结果。当强制将该整数结果赋值给double变量时,它会将整数0转换为double 0.0。
没有必要使两个操作数都加倍,如果任何一个是双倍,编译器将在执行操作之前将另一个转换为double。 1.0 / 3或1 / 3.0都将返回您期望的结果,1.0 / 3.0也是如此。
答案 3 :(得分:1)
你的1/3是整数除法,整数除法的结果是0。