std :: pow给出了小数指数的错误近似值

时间:2009-10-16 20:50:04

标签: c++ c numerical-methods

这就是我的意思

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

结果为0但我期望0.4465

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

4 个答案:

答案 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)

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

C和C ++将根据操作数的类型执行操作。由于两个操作数都是整数,因此它执行整数除法,从而创建整数结果。当强制将该整数结果赋值给double变量时,它会将整数0转换为double 0.0。

没有必要使两个操作数都加倍,如果任何一个是双倍,编译器将在执行操作之前将另一个转换为double。 1.0 / 3或1 / 3.0都将返回您期望的结果,1.0 / 3.0也是如此。

答案 3 :(得分:1)

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