генерация случайных чисел в C++ с помощью TR1 /dev/random (устойчивость к <1 секунды)

Я хотел бы генерировать равномерные случайные числа в 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; 
} 
6
задан Yu Hao 1 December 2013 в 03:00
поделиться