我想以不使用标准rand()
和srand(time(NULL))
方法的方式在 C++ 中生成 0 到 1 之间的统一随机数。这样做的原因是,如果我在时钟的同一秒内多次运行应用程序,种子将完全相同并产生相同的输出。
我不想依赖于 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;
}