2010-05-05 69 views
0

我在我的代码有一点问题。变量不想改变它们的值。你能说出原因吗? 这里是我的代码: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变量不会改变,而这是一个无限循环。有什么问题?你怎么看?

+0

什么是'angle','x'和'y'等于当你到while循环?什么是'我'? – GManNickG 2010-05-05 21:45:28

+0

'r0'的价值是什么? – 2010-05-05 21:48:41

+0

感谢-1 ... :)我不知道,愚蠢的人会被降级... :) – 2010-05-05 21:57:57

回答

12

你为什么expeciting xy改变?您为他们分配了一个不会改变的计算值?

rand() * 2.0 * M_PI总是2 * PI的倍数(只要双可以代表),所以cos(angle)将为1和sin(angle)将为0

+0

我认为这将是很好的答案...:P我会检查它;) – 2010-05-05 21:52:49

+0

是的。 C标准rand函数返回整数,而不是双精度。 – 2010-05-05 21:52:53

+0

+1。基本上,我认为原始用户期望rand()在0到1浮点之间返回,而不是从0到RAND_MAX,如下所述:http://www.cplusplus.com/reference/clibrary/cstdlib/rand/ – 2010-05-05 21:53:36

0

也许你的rand()函数没有定义。有时无法包含正确的头文件会导致调用一个奇怪的默认rand,并且它可能总是返回相同的数字。这只是我的头顶,但我会检查这个方向。

其实,我不记得这与兰特发生的事情,但我想我已经看到了它与三角函数发生,如果你不包括math.h中尽管这可能是编译器特有的怪癖。

0

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

如果没有帮助,找出每个元素是通过添加更多的cout