我正在使用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)
为什么这样?
该^字符表示按位排他,或者不是您期望的指数函数.
由于你已经在循环中计算了这个,你可以很容易地在等式中生成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)
在这个特定的实例中,我们初始化j为n-2您需要的第一个值,然后继续将其乘以2以获得您需要的下一个2的幂.
首先:
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)
| 归档时间: |
|
| 查看次数: |
302 次 |
| 最近记录: |