2016-05-23 3 views
-4

Я знаю, что в C мы можем использовать rand() для генерации случайных чисел и использовать srand() для установки семени. Однако теперь я хочу создать независимый случайный генератор (например, переменную или определить класс).Независимый случайный генератор в C


От независимого генератора случайных чисел я имею в виду: в программе есть несколько частей, использующих случайность. Если я использую srand() для изменения семени в одной части, это повлияет на случайность в других частях. Вот почему я хочу, чтобы независимая структура контролировала случайность. я увидел это:

unsigned long next=1; 
int rand(void) /* NOT RECOMMENDED (see text) */ 
{ 
    next = next*1103515245 + 12345; 
    return (unsigned int)(next/65536) % 32768; 
} 
void srand(unsigned int seed) 
{ 
    next=seed; 
} 

Существуют ли более эффективные способы?

+1

Что вы подразумеваете под «независимым случайным генератором»? Пожалуйста, дополните. –

+1

Разве ваше исследование не показало ничего полезного в этой обсуждаемой теме? –

+0

Если вам нужны реальные случайные числа, вам понадобится дорогостоящее оборудование. –

ответ

0

Понятия, которые вы описываете, иногда называют случайных потоков или случайная синхронизация.

В то время как вы легко могли бы построить что-то по своему усмотрению, я рекомендую Gnu Scientific Library, который имеет много различной высококачественной PRNGs, а также хороший абстрактный интерфейс, который легко использовать в этом случайного потоке -Установки.

Вышеупомянутая ссылка дает вам пример, где объект RNG создается для дальнейшего использования. В вашем случае вы будете создавать несколько случайных потоков и использовать их в разных частях кода. Поэтому каждый случайный поток только модифицирован (внутреннее состояние), если именно этот случайный поток был вызван (и независим от обычаев других).

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