Я хотел бы смочь сделать что-то вроде этого (очевидно, не допустимый C++):
rng1 = srand(x)
rng2 = srand(y)
//rng1 and rng2 give me two separate sequences of random numbers
//based on the srand seed
rng1.rand()
rng2.rand()
Там какой-либо путь состоит в том, чтобы сделать что-то вроде этого в C++? Например, в Java я могу создать два java.util. Случайные объекты с семенами я хочу. Кажется, что в C++ существует только единственный глобальный генератор случайных чисел. Я уверен, что существуют библиотеки, которые обеспечивают эту функциональность, но так или иначе сделать это только с C++?
В TR1 (и C++0x) вы могли бы использовать заголовок tr1/random
. Он должен быть встроен в современные компиляторы C++ (по крайней мере, в g++ и MSVC).
#include <tr1/random>
// use #include <random> on MSVC
#include <iostream>
int main() {
std::tr1::mt19937 m1 (1234); // <-- seed x
std::tr1::mt19937 m2 (5678); // <-- seed y
std::tr1::uniform_int<int> distr(0, 100);
for (int i = 0; i < 20; ++ i) {
std::cout << distr(m1) << "," << distr(m2) << std::endl;
}
return 0;
}
как сказал @James McNellis, я не могу представить, зачем вам это делать, и какие плюсы вы получите. Опишите, какого эффекта вы хотели бы добиться.
Я просто хочу отметить, что использование разных начальных чисел может не дать вам статистически независимых случайных последовательностей. mt19937 - исключение. Два объекта mt19937, инициализированные разными начальными числами, дадут вам более или менее (в зависимости от того, кого вы спросите) статистически независимые последовательности с очень высокой вероятностью (есть небольшая вероятность, что последовательности будут перекрываться). Стандартный ГСЧ в Java - заведомо плохой. Существует множество реализаций mt19937 для Java, которые следует предпочесть стандартному ГСЧ.