我想用0和1之间的C++生成统一的随机数,其方式不使用标准的rand()
和srand(time(NULL))
方法。原因是,如果我在同一秒钟内多次运行应用程序,种子将完全相同并产生相同的输出。使用TR1/dev/random在C++中生成随机数
我不想依赖boost或OS /编译器的细节。 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;
}
你是否愿意使用OS /编译器特有的功能? – Mysticial 2011-12-28 21:00:24
我想避免这个......我将在各种系统上部署这个 – gnychis 2011-12-28 21:01:10
各种各样?他们仍然是x86吗? – Mysticial 2011-12-28 21:01:45