Я хотел бы генерировать равномерные случайные числа в C++ между 0 и 1, способом, который не использует стандартные rand()
и srand(time(NULL))
. Причина этого в том, что если я запущу приложение более одного раза в течение одной и той же секунды моих часов, семена будут точно такими же и выдадут одинаковый результат.
Я не хочу полагаться на boost или специфику ОС/компилятора. Можно предположить, что x86.
Кажется, что альтернативный способ сделать это - использовать TR1 (у меня нет C++11) и посев с /dev/random
каким-то образом?
Сейчас у меня есть это, но оно все еще использует time(NULL)
в качестве семени, которое не будет хорошо работать в течение 1 секунды:
#include <iostream>
#include <tr1/random>
int main()
{
std::tr1::mt19937 eng;
eng.seed(time(NULL));
std::tr1::uniform_int<int> unif(1, RAND_MAX);
int u = unif(eng);
std::cout << (float)u/RAND_MAX << std::endl;
}