2015-09-09 5 views
1

Я пишу программу, которая использует случайные числа широко по-разному, и каждый раз получаю одинаковые случайные числа. Я знаю, чтобы положить srand(time(NULL)); в начале программы, чтобы засеять генератор случайных чисел, и поэтому у меня это есть, но он не работает. Возможно, это имеет какое-то отношение к XCode или Mac или к чему-то еще? Я не могу найти аналогичную проблему в Интернете, у меня есть решение, которое я еще не пробовал. Некоторые способы я использую случайных чисел являются:Ошибка генерации случайных чисел в C++ на Mac с помощью Xcode

for (int i=0; i<num; i++) 
{ 
    chrom_arr[i] = i; 
} 
random_shuffle(&chrom_arr[0], &chrom_arr[num-1]); 

(чтобы получить массив с серией случайных целых чисел от 0 до Num-1)

int crossover = rand() % num; 

и другие простые вещи, как это. Несмотря на то, что у меня есть srand(time(NULL)); в начале, он все равно не работает. Я также пробовал srand(time(0));, а также помещал его в разные части программы, но с тех пор я узнал, что это неправильно.

+1

Фактически это будет между 0 и num-2, так как конечный итератор должен быть один за концом. Использование 'std :: end', вероятно, помешало бы этому. –

+0

Вы всегда получаете одинаковые номера? Даже если вы ждете пять минут между прогонами? – rici

+0

Вы правы - это правда, и я только что исправил это. Я все равно получаю одинаковые случайные числа (хотя теперь они отличаются от тех, которые я продолжал получать раньше) – Alex

ответ

1

Вы должны попробовать somethig так:

srand(static_cast<unsigned int>(time(0))); 
std::shuffle(chrom_arr.begin(), chrom_arr.end(), default_random_engine(rand())); 

Это будет работать до тех пор, как chrom_arr является std::vector. Как только вы используете C++, я предполагаю, что это то, что вы пытаетесь сделать.

+0

Я попробую это, как только я снова напишу свою программу (я просто случайно уничтожил все это ...) – Alex

+0

Эй, это действительно сработало. Благодаря! Я не знаю, что он делал раньше. – Alex

2

Alex, можете ли вы отправить небольшую, но полную программу, которая не может генерировать разные случайные числа при каждом запуске? Мне было бы интересно посмотреть ...

Вот один, что (конечно) делает дают разные числа каждый раз, когда он запускается на моем Mac:

#include <iostream> 
#include <ctime> 
#include <cstdlib> 

int main() 
{ 
    srand(time(NULL)); 
    for (int i = 0; i < 10; ++i) 
     std::cout << rand() % 10 << std::endl; 
    return 0; 
} 

Что делать, если вам компилировать и запускать его несколько раз на вашем компьютере?

UPDATE:

Я думал, что ты имел в виду srand() + rand()также производства одинаковых чисел каждый раз. Это неправда. Однако вы правы в поведении srand() + random_shuffle(): он может давать одинаковые номера каждый раз, в зависимости от вашего компилятора. Это делается на моем компиляторе (clang на Mac) тоже.

Об этом сообщается here.

+0

Вы можете не поверить в это, но, открыв проект Xcode для запуска этого кода, я случайно удалил весь проект, над которым я работал больше недели , Я не люблю тебя. Так что теперь я даже не знаю. Я должен начать все сначала. Клянусь, я не шучу. – Alex

+0

WhiteViking - я запускал этот код, и каждый раз он создавал разные случайные числа. Код, который я сейчас переписал (не вся программа), все равно дает одинаковые случайные числа каждый раз. Я уверен, что это происходит здесь: random_shuffle (& chrom_array [0], & chrom_array [num-1]); – Alex