c++ problem, maybe with types
I have a little problem in my code. The variables don't want to change their values. Can you say why? Here is my code:
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
And the result on the console is:
6.65627e+09 0.99347 0.984713 1.09347 0.9847131.16964e+09
0.99347 0.984713 1.09347 0.984713As you see the values of x, y variables doesn't change and this while be an infinity loop. What's the problem? What do you think?
Why are you expeciting x
and y
to change? You assign to them the value of a calculation that doesn't change?
rand() * 2.0 * M_PI
is always a multiple of 2 * pi (as far as a double can represent) so cos(angle)
will be 1 and sin(angle)
will be 0.
Perhaps your rand() function isn't defined. Sometimes failing to include the correct headers results in an odd default rand being called, and it may always return the same number. This is just off the top of my head, but I would check in that direction.
Actually, I don't ever remember this happening with rand, but I think I've seen it happen with the trigonometric functions if you don't include math.h. Though that may be a compiler specific quirk.
angle
you are generating seems to be extremely large. I'm assuming you want to generate angle
between 0
and 2*pi
. Check to see if rand()
is returning a number between 0 to 1 and also check to see what M_PI
is.
If that doesn't help, find out what each elements are by adding more cout
精彩评论