C语言产生随机数中,如果种子不变,一直运行rand函数,真的会时无限不循环吗?

如题所述

并不是,如果种子不变,一直算下去,会出现循环现象,只是多少数后才循环与算法相关, 一般算法每次运算都是拿上次生成的数据当成种子, 这样算下去比如说几万个数后会出现与前边重复的结果的
如果每次设置的种子都相同,那么生成的伪随机数列是相同的
可以百度一下伪随机数计算公式,从公式就可以看出不会有无限不循环的情况,这也就是为什么叫"伪随机"的原因追问

可以这样理解吗?当种子固定为一个值时,所使用的随机数算法中种子是唯一的变量,但运行N次后这个种子肯定会回到原来的值,这样的话就会出现循环的现象了,而N的大小只是与你所写的算法有关.是这样吗?

追答

对的. 给定一个值,如果反复计算出随机数,如果中途不更新种子操作,必然会循环. 按照当前比较简单的伪随机算法,当每次初始种子都一致时, 生成的随机系列一般是一致的.

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-09-17
rand函数产生的是伪随机数,用某种算法算(最简单的可能是线性同余算法)出来的数,而这些算法大都是公开的。因此,产生随机数时使用的种子就显得很重要,只要每次使用不同的种子,就能保证产生的数具有一定的随机性。如果种子相同,就会产生相同的随机数序列。
第2个回答  2019-09-17
C语言只是在语言层面,具体的实现要看系统调用是怎么给它这个随机数了。你说的根据种子进行运算,产生均匀分布的随机数,是固定序列的伪随机数。如果系统调用提供的随机数来自于熵池,而不是种子,那么就是真随机数。
另外,你的一个理解有误,随机数的“随机”在于数据之间“无相关性”,并不是说要不重复(我想你说的无限不循环实际是这个意思吧),比如两次连续出现值1,这也并不违反随机性。只是从统计角度来说,趋于均匀分布是随机数的一个特点,所以伪随机数生成函数都是用是否均匀这一指标来衡量的。
第3个回答  2019-09-17
一般的随机数都是伪随机,有重复的可能,计算机生成的不会重复的数据常见的只有全局唯一标识符GUID
相似回答