Будут ли повторные вызовы srand () в c ++ использовать одно и то же семя? - PullRequest
0 голосов
/ 28 ноября 2008

Если у меня есть srand (2), объявленное в моей основной части файла драйвера, мне нужно объявить srand (2) в моем файле кода, который связан с моим драйвером?

Спасибо.

редактировать

(из комментария пользователя ниже)

Если я это сделаю,

srand(2);
srand(2);

получу ли я семя как 2? или что-то еще?

Ответы [ 3 ]

2 голосов
/ 28 ноября 2008

srand (2) устанавливает начальное значение генератора случайных чисел на 2. Повторный вызов с тем же параметром снова устанавливает начальное значение на 2, и генератор случайных чисел создает тот же выход.

К вашему сведению, если драйвер использует свою собственную копию srand (т.е. это DLL), это может не повлиять на генератор случайных чисел, используемый в вашем основном исполняемом файле.

1 голос
/ 28 ноября 2008

Я думаю, вам придется разъяснить свой вопрос немного больше, но в целом вы должны объявить (но не определить) каждую функцию, которую вы используете в данном модуле перевода. Если вы хотите использовать srand в файле .cpp, вам потребуется #include <stdlib.h> в этом файле.

Для использования srand - посмотрите документацию . Обычно вам нужно вызывать его только один раз в данном процессе, после чего вы можете ожидать одинаковую последовательность псевдослучайных значений при каждом запуске. Повторный вызов с тем же начальным числом перезапустит последовательность значений. Если вы хотите разные значения при каждом запуске, попробуйте заполнить с текущим временем.

EDIT:

Вы имеете в виду, что у вас есть два файла примерно так:

// Driver.cpp
#include <stdlib.h>
#include "otherfile.h"

int main()
{
    srand(2);
    Somefunc();
}

А затем еще один файл, связанный с:

// OtherFile.cpp
#include <stdlib.h>
#include "otherfile.h"

void SomeFunc()
{
    // You don't need to call srand() here, since it's already been called in driver.cpp
   int j = rand();
}
0 голосов
/ 27 августа 2009

Когда вы вызываете srand () с определенным начальным числом, последовательность для этого начального числа начинается независимо от любого предыдущего вызова srand (). Например, каждый раз, когда вы вызываете srand (2), последующие вызовы rand () будут каждый раз давать вам одинаковые номера в одном и том же порядке. Итак:

srand(2);
srand(2);

является избыточным. Эта ссылка имеет хорошее описание srand.

...