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)
许多人已经说过1/3 = 0,但没有解释为什么会这样.
C和C++将根据操作数的类型执行操作.由于两个操作数都是整数,因此它执行整数除法,从而创建整数结果.当强制将该整数结果赋值给double变量时,它将整数0转换为double 0.0.
没有必要使两个操作数都加倍,如果任何一个是双倍,编译器将在执行操作之前将另一个转换为double.1.0/3或1/3.0都将返回您期望的结果,1.0/3.0也是如此.