2010-05-05 3 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' равно, когда вы получаете время цикла? Что такое 'i'? – GManNickG

+0

Какова ценность 'r0'? –

+0

Спасибо за -1 ... :) Я не знал, что глупые люди будут деградированы ... :) –

ответ

12

Почему вы изгибаете x и y изменить? Вы назначаете им значение вычисления, которое не изменяется?

rand() * 2.0 * M_PI всегда кратна 2 * пи (насколько двойной может представлять собой), так cos(angle) будет 1 и sin(angle) будет 0.

+0

Я думаю, что это будет хороший ответ ...: P Я проверю;) –

+0

Да. C-стандартная функция rand возвращает ints, а не удваивает. –

+0

+1 на этом. В принципе, я думаю, что исходный пользователь ожидает, что rand() вернется между 0 и 1 плавающей точкой, а не 0 в RAND_MAX, как указано здесь: http://www.cplusplus.com/reference/clibrary/cstdlib/rand/ –

0

Возможно, ваша функция рандов() не определено. Иногда отказ включить правильные заголовки приводит к появлению нечетного стандартного rand по умолчанию, и он всегда может вернуть тот же номер. Это как раз у меня на голове, но я бы проверял в этом направлении.

На самом деле, я никогда не помню, как это происходило с рандом, но я думаю, что видел, как это происходит с тригонометрическими функциями, если вы не включаете math.h. Хотя это может быть специфическая особенность компилятора.

0

angle Вы создаете, кажется, очень большой. Я предполагаю, что вы хотите сгенерировать angle между 0 и 2*pi. Проверьте, возвращает ли rand() число от 0 до 1, а также проверьте, что такое M_PI.

Если это не поможет, узнать, что каждый из элементов, добавляя больше cout

Смежные вопросы