问题描述
我明白什么是传递到函数srand()
作为参数将作为种子调用兰特()
这样以后发生。一般时间(NULL)
在过去。
但是如果你只叫函数srand
一次,然后你兰特
正在不断地在循环中调用,怎么是数字各不相同?种子是从时间(NULL)返回的值
...但只使用一个特定的返回值。因此,如何正在生成不同的号码?
我不每次使用线程和不同的种子了解线程在C.什么,但为函数srand
,以便后续调用到兰特
其实并返回随机数?我注意到,当我通过一个静态的数函数srand
而不是时间(NULL)
的兰特
仍将产生随机数。
草案C99标准提供了部分样本实施 7.20.2.2
的 srand函数的,这将很可能清理它是如何为你工作:
srand
set the static variable next
which is then set to new value in rand
and then subsequent calls to rand
will pick up with the previous value of next
.
For example if we used srand(1)
then the sequence would look like this as we make calls to rand
:
next = 1
next = 1 * 1103515245 + 12345 = 1103527590
next = 1103527590 * 1103515245 + 12345 = 1217759518843121895
next = 1217759518843121895 * 1103515245 + 12345 = 15426401326682203284
As HostileFork points out, the numbers are not truly random but are Pseudorandom, which says:
This particular implementation is using a Linear congruential generator.
这篇关于如何兰特()做出的随机数,即使你不随时间(NULL)种子呢?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!