可能重复:
在C++中使用rand()函数的正确方法是什么?
当我运行以下程序时,我每次都会得到相同的值.兰特不是真正的随机函数吗?
int main()
{
while(1)
{
getch();
cout<<rand()<<endl;
}
}
Run Code Online (Sandbox Code Playgroud)
在每次运行中,我得到以下值.
41
18467
6334
26500
19169
15724
......
Rak*_*kis 11
是的,不是.rand()是一个伪随机数生成器,它将始终返回给定相同种子值的相同数字序列.通常一个'种子'随机数生成器带有一些随机数据,然后使用rand()返回一系列看似随机的数字.如果对于需要"真正"随机性的事物(例如基于加密的安全性)不需要随机数据,那么仅使用当前系统时间就足够了.但是,如果您出于安全目的使用它,请考虑从熵收集实用程序中获取更多真正的随机数据,并使用它来为随机数生成器播种.
如上所述,这里引用了种子函数
什么是真正的随机函数?最后我检查过,电脑无法做到:)
至于为什么每次都得到相同的数字集,这是因为你需要使用一些起始的"随机"值为内置数字生成器播种.有很多地方可以做到这一点,但有些人看起来很好,但结果很糟糕.在我们的游戏中,我们通常从游戏启动到第一或第二个用户输入的时间播种.用户输入总是会因许多抽搐而变化,因此可以用作一个不错的起点.
| 归档时间: |
|
| 查看次数: |
1767 次 |
| 最近记录: |