是否可以在C++中预测rand()

Sat*_*bir 3 c++ random

可能重复:
在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()返回一系列看似随机的数字.如果对于需要"真正"随机性的事物(例如基于加密的安全性)不需要随机数据,那么仅使用当前系统时间就足够了.但是,如果您出于安全目的使用它,请考虑从熵收集实用程序中获取更多真正的随机数据,并使用它来为随机数生成器播种.

如上所述,这里引用了种子函数

  • 对于cyptography,确保您的随机数生成器是合适的 - 这些要求与其他随机数使用有所不同.更好的是,使用您的操作系统中的一个,或像cyrpto ++这样的已建立的库.如果你创建自己的,你可能会弄错. (5认同)

Mic*_*gan 5

什么是真正的随机函数?最后我检查过,电脑无法做到:)

至于为什么每次都得到相同的数字集,这是因为你需要使用一些起始的"随机"值为内置数字生成器播种.有很多地方可以做到这一点,但有些人看起来很好,但结果很糟糕.在我们的游戏中,我们通常从游戏启动到第一或第二个用户输入的时间播种.用户输入总是会因许多抽搐而变化,因此可以用作一个不错的起点.