我在试图生成一个随机的无符号__int64值时遇到了困难,有没有人有一种快速有效的方法来做这样的事情呢?下面是我正在做的,检查下面的代码。
unsigned __int64 m_RandomKey = 0;
while(m_RandomKey == 0)
{
m_RandomKey = (unsigned __int64) rand() << 32 | rand();
}生成一个未签名的__int64密钥的最佳方法是什么,这样很难在一段时间后再获得相同的密钥,甚至根本不需要?--只要它在18,446,744,073,709,551,615中仍然有1的可能不再出现,它就不一定是唯一的!
发布于 2013-05-06 20:32:03
如果使用的是C++11,则可以使用std::mt19937_64,这是Mersenne算法的原生64位实现。
见http://en.cppreference.com/w/cpp/numeric/random。
它可以在VisualC++ 2010和2012年(http://msdn.microsoft.com/en-us/library/ee462314(v=vs.100).aspx )中获得。
发布于 2013-05-06 20:39:48
我认为你的方法是快速,便携和足够好。只要你初始化随机种子好,这应该是非常好的工作。Rand()可能不是一个完美的均匀分布,但它非常接近。
正如@Pete在下面提到的那样,Rand()只会在16位数字上工作,所以对于真正的可移植性来说,一个稍微复杂一些的表达式可能更好: m_RandomKey = (rand() << 48) ( (rand() << 48)x (rand() << 32)\(rand()<<16)\rand();
还是快而且肯定更好。
https://stackoverflow.com/questions/16406709
复制相似问题