开发者

c++ problem, maybe with types

开发者 https://www.devze.com 2022-12-29 21:05 出处:网络
I have a little problem in my code. The variables don\'t want to change their values. Can you say why?

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.984713

1.16964e+09

0.99347

0.984713

1.09347

0.984713

As 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

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号