rand()如何工作?它有一定的倾向吗?有没有比这更好用的东西?

时间:2010-08-21 23:06:46

标签: objective-c c random

我已经读过它与时间有关,你也可以从包含time.h开始,所以我假设了很多,但它是如何工作的呢?此外,它是否有任何倾向于奇数或偶数或类似的东西?最后是在C标准库或Foundation框架中有更好的分发吗?

3 个答案:

答案 0 :(得分:20)

答案 1 :(得分:10)

rand返回pseudo-random number generator(PRNG)生成的数字。它返回的数字序列是确定性的,基于PRNG初始化的值(通过调用srand)。

应该分配数字使得它们看起来有些随机,因此,例如,奇数和偶数应该以大致相同的频率返回。随机数生成器的实际实现未指定,因此实际行为特定于实现。

要记住的重要一点是rand不会返回随机数;它返回伪随机数,它返回的值由种子值和调用rand的次数决定。此行为适用于许多用例,但不适合其他用例(例如,rand不适合在许多加密应用程序中使用)。

答案 2 :(得分:1)

  

rand()如何运作?

http://en.wikipedia.org/wiki/Pseudorandom_number_generator

  

我已经读到它有一些东西要做   随着时间的推移,你也得到了   包括time.h

rand()与时间毫无关系。但是,使用time()来获取PRNG的“种子”是很常见的,这样每次运行程序时都会得到不同的“随机”数字。

  

此外,它有任何倾向   对于奇数或偶数或   类似的东西?

取决于使用的确切方法。 rand()有一个流行的实现,在奇数和偶数之间交替。因此,请避免编写rand() % 2之类的代码,这些代码取决于最低位是随机的。