本文介绍了如何兰特()做出的随机数,即使你不随时间(NULL)种子呢?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我明白什么是传递到函数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)种子呢?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-22 00:36