c – 比时间更好的种子(0)?
我明白,时间(0)通常用于播种随机数发生器,并且当程序每秒运行多次时,它只会成为问题.我想知道生成随机数时要考虑什么更好的种子.我在
Windows上阅读了关于GetTickCount,timeGetTime和Query
PerformanceCounter.几乎所有操作都足够了,还是有更好的种子选择?
以下是使用boost库的快速代码示例: #include <iostream> #include <boost/random.hpp> using namespace std; using namespace boost; int main() { mt19937 randGen(42); uniform_int<> range(0,100); variate_generator<mt19937&,uniform_int<> > GetRand(randGen,range); for (int i = 0; i < 30; ++i) cout << GetRand() << endl; } 解决方法
Netscape安全性的一些早期攻势集中在知道何时发送加密数据包,并缩小可能范围的种子的知识.所以,得到一个滴答计数或其他甚至远程确定性不是你最好的赌注.
即使使用种子,根据该种子,“随机”数的序列是确定性的.内华达州的游戏委员会调查员意识到这一点,他应该检查一些插槽,并使用这些知识赚取相当多的钱,才被抓住. 如果您需要世界级的随机性,您可以向您的系统添加硬件,提供高度随机的数字.这就是众所周知的扑克网站(至少这就是他们所说的话). 结合您的系统的一些因素,所有这些因素都可以独立快速地变化,尽可能少的可预测性,创造出非常体面的种子.对SO的相关文章的回答建议使用Guid.NewGuid().GetHashCode().由于Guid是基于一些确定性因素,包括时间,这不是种子的良好基础:
资料来源:Wikipedia Globally Unique Identifier (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |