当我在C++中用^计算指数时,为什么我得不到正确的结果?

xbo*_*nez 2 c++

我正在使用Bode的formuala来计算第n行星与太阳的距离

dist = (4 + 3*(2^(n-2)))/10
Run Code Online (Sandbox Code Playgroud)

如果我以这种方式计算距离,我会得到正确的值:

dist[2] = ((4 + 3*1)/10.0) ;  
dist[3] = ((4 + 3*2)/10.0) ;  
dist[4] = ((4 + 3*4)/10.0) ;
Run Code Online (Sandbox Code Playgroud)

但这样做会给我不正确的值:

vector <double> dist(5);  

for (unsigned int i = 2; i < 5; i++)  
{  
    dist[i] = ((4 + 3*(2^(3-2)))/10.0) ;  
}
Run Code Online (Sandbox Code Playgroud)

为什么这样?

Mar*_*iot 8

^字符表示按位排他,或者不是您期望的指数函数.

由于你已经在循环中计算了这个,你可以很容易地在等式中生成2所需的幂,简单(并且接近你的代码)将是:

vector<double> dist(5);
unsigned int j = 1;
for(unsigned int i = 2; i < 5; i++){
    dist[i] = (4+3*j)/10.0;
    j = j * 2;
}
Run Code Online (Sandbox Code Playgroud)

在这个特定的实例中,我们初始化jn-2您需要的第一个值,然后继续将其乘以2以获得您需要的下一个2的幂.


Ara*_*raK 7

因为^不是C++中的幂运算符.您可以使用std::pow但可以使用double或者您可以进行大量的投射以使其适用int.


Rau*_*ait 5

首先:

dist[i] = ((4 + 3*(2^(3-2)))/10.0) ;
Run Code Online (Sandbox Code Playgroud)

是不变的.我相信你打算做以下事情:

dist[i] = ((4 + 3*(pow(2, (i-2)))/10.0) ;
Run Code Online (Sandbox Code Playgroud)