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

veh*_*zzz 6 c c++ numerical-methods

这就是我的意思

 double x=1.1402
 double pow=1/3;
 std::pow(x,pow) -1;
Run Code Online (Sandbox Code Playgroud)

结果是0但我期望0.4465

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

GMa*_*ckG 19

1/3是0.这是整数除法.

尝试:

double pow = 1.0 / 3.0;
Run Code Online (Sandbox Code Playgroud)

对于:

#include <iostream>
#include <cmath>

int main(void)
{
 double x = 1.1402;
 double pow = 1.0/3.0;
 std::cout << std::pow(x, pow) - 1;

}
Run Code Online (Sandbox Code Playgroud)

  • 嗯,好的......\*耸耸肩* (2认同)

Jer*_*fin 12

1/3是作为整数运算完成的,所以你要为0分配'pow'.尝试pow


Mar*_*som 6

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

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

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