[英]generate uncorrelated number in the C language using rand()
我想生成不相关的随机数来进行模拟......但是, C language
中rand()
函数生成的数字是相关的。
有没有可能使用rand()
函数并生成多个随机流?
我的意思是,如果rand()
函数为我生成一系列相关数字,我可以将这个系列剪切成不同的流。 然后独立使用这些流?
谢谢
你确实是对的。 它们通常是自相关的,因为正常的生成器实现是线性同余的 (尽管C标准没有强制要求)。 因此,连续数字的xy图将无法进行随机2D色散的卡方检验。
根据你的应用,你可以看看Bays-Durham shuffle,据我所知,它通过了随机性的死硬测试:它的目的是打败自相关效应。
我将您引导至www.nr.com进行实施,特别是rand1
, rand2
功能。 更现代的方法是使用mersenne twister方案,但实现一点点试图(顺便说一句,C ++ 11将此生成器作为其标准库的一部分)。
如果你的C实现有rand_r ,你可以试试。 它允许您指定存储状态的位置。
或者只使用您自己的伪随机数生成器。
您可以使用arc4random
或更好的ar4random_uniform
来增加生成值的随机性(实际上ar4random_uniform
证明了统一分布的值)。
在计算机上生成真正的随机数是不可能的,您只能生成“伪随机”数字,即“看起来像”随机的数字。
通常会使用具有足够熵的“种子”(小比特序列)然后通过伪随机数生成器 “扩展”它。
C rand()
函数产生低质量的随机性,尝试在其他答案/评论中提出的PRNG。 一些例子 :
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.