2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 C++ функция srand()
Сообщение20.08.2011, 16:07 


31/10/10
12
Здравствуйте, не могу понять как работает функция srand(), почему при помещении ее в цикл с rand() числа не генерируется случайно, а при вызове единожды все работает правильно?

 Профиль  
                  
 
 Re: C++ функция srand()
Сообщение20.08.2011, 21:39 
Заслуженный участник
Аватара пользователя


13/08/08
14495
Я так понял, что rand это формульный генератор целых случайных чисел с некоторым стартовым числом seed. Если перед обращением к ранду устанавливать определённый сид, то будет генерироваться одна и та же последовательность, что удобно, наверное, для каких-то целей.
Сид устанавливается функцией srand с параметром в виде значения этого сида. Если Вы в цикле перед обращением к генератору каждый раз инициализируете его одним и тем же сидом (а Srand без параметров устанавливает сид всегда в 1), то у Вас и будет генерироваться одно и то же число.
Если Вы будете вызывать srand (определённое число) до цикла, то у Вас будет генерироваться случайная последовательность, которую можно будет потом повторить.
Если Вы будете вызывать srand (системного времени) в цикле или до цикла, то у Вас будет генерироваться случайная последовательность, которую нельзя будет потом повторить.
Но в цикле вызывать srand( системного времени) это уже ненужное пижонство трато процессорных сил.

 Профиль  
                  
 
 Re: C++ функция srand()
Сообщение22.08.2011, 10:41 


02/12/10
10
Вопрос в догонку. Если я хочу генерировать одинаковые последовательности случайных чисел, то с каким постоянным параметром лучше вызывать srand(), чтобы получающаяся последовательность была наилучшей - максимально длинной, независимой и т.д.?

 Профиль  
                  
 
 Re: C++ функция srand()
Сообщение22.08.2011, 12:52 
Заслуженный участник
Аватара пользователя


01/08/06
3131
Уфа
Насколько я знаком с вопросом, любое значение должно приводить к одной и той же (циклической) последовательности, выбирая лишь разные начальные номера в ней.

 Профиль  
                  
 
 Re: C++ функция srand()
Сообщение22.08.2011, 14:18 
Заслуженный участник


27/04/09
28128
DoctorZLO, если вам нужны псевдослучайные последовательности с как можно более «хорошими» статистическими свойствами, советую посмотреть в сторону не встроенных в стандартные библиотеки генераторов (обычно это линейный конгруэнтный): к примеру, метод Фибоначчи с запаздываниями, вихрь Мерсенна. И ещё много разных есть.
Притом, скорее всего, вам не придётся писать реализацию генератора самому: думаю, для C++ их пишут в первую очередь. :-) (Или одну из первых.)
С другой стороны, в стандартной библиотеке C++ вроде был класс для генерации криптостойких псевдослучайных чисел — его статистические свойства, по идее, также лучше.

-- Пн авг 22, 2011 17:26:22 --

worm2 в сообщении #476976 писал(а):
Насколько я знаком с вопросом, любое значение должно приводить к одной и той же (циклической) последовательности, выбирая лишь разные начальные номера в ней.
Не обязательно: может быть несколько циклов разной длины.

 Профиль  
                  
 
 Re: C++ функция srand()
Сообщение23.08.2011, 04:25 
Заслуженный участник


26/07/09
1559
Алматы
2arseniiv
Цитата:
в стандартной библиотеке C++ вроде был класс для генерации криптостойких псевдослучайных чисел

Это какой-же? Или вы про C++11? Или про boost?

 Профиль  
                  
 
 Re: C++ функция srand()
Сообщение23.08.2011, 12:36 
Заслуженный участник


27/04/09
28128
Вот этого я и не помню. Помню, что где-то около был. Даже имени не вспомню, но, может, его звали crypto_random или похоже. :?

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group