c ++问题,也许是类型

时间:2010-05-05 21:43:26

标签: c++

我的代码中有一点问题。变量不想更改其值。你能说出原因吗? 这是我的代码:

vector<coordinate> rocks(N);
double angle;
double x, y;
// other code
while (x > 1.0 || x < -1.0 || y > 1.0 || y < -1.0) {
    angle = rand() * 2.0 * M_PI;
    cout << angle << endl;
    cout << rocks[i - 1].x << endl;
    cout << rocks[i - 1].y << endl;
    x = rocks[i-1].x + r0 * cos(angle);
    y = rocks[i-1].y + r0 * sin(angle);
    cout << x << endl;
    cout << y << endl << endl;
}
// other code

控制台上的结果是:
6.65627e + 09
0.99347
0.984713
1.09347
0.984713

1.16964e + 09
0.99347
0.984713
1.09347
0.984713

当你看到x的值时,y变量不会改变,而这是一个无限循环。有什么问题?你觉得怎么样?

3 个答案:

答案 0 :(得分:12)

为什么要预测xy进行更改?您为它们分配了不会改变的计算值吗?

rand() * 2.0 * M_PI始终是2 * pi的倍数(就双数而言可以表示),因此cos(angle)将为1,而sin(angle)将为0。

答案 1 :(得分:0)

也许你的rand()函数没有定义。有时未能包含正确的标题会导致调用奇数默认rand,并且它可能始终返回相同的数字。这只是我的头脑,但我会检查这个方向。

实际上,我永远不会记得rand会发生这种情况,但是如果你不包含math.h,我想我已经看到它发生在三角函数中。虽然这可能是编译器特有的怪癖。

答案 2 :(得分:0)

你生成的

angle似乎非常大。我假设您要在angle0之间生成2*pi。检查rand()是否返回0到1之间的数字,并检查M_PI是什么。

如果这没有用,请通过添加更多cout

找出每个元素的内容