繁体   English   中英

使用rand()在C语言中生成不相关的数字

[英]generate uncorrelated number in the C language using rand()

我想生成不相关的随机数来进行模拟......但是, C languagerand()函数生成的数字是相关的。
有没有可能使用rand()函数并生成多个随机流?
我的意思是,如果rand()函数为我生成一系列相关数字,我可以将这个系列剪切成不同的流。 然后独立使用这些流?

谢谢

你确实是对的。 它们通常是自相关的,因为正常的生成器实现是线性同余的 (尽管C标准没有强制要求)。 因此,连续数字的xy图将无法进行随机2D色散的卡方检验。

根据你的应用,你可以看看Bays-Durham shuffle,据我所知,它通过了随机性的死硬测试:它的目的是打败自相关效应。

我将您引导至www.nr.com进行实施,特别是rand1rand2功能。 更现代的方法是使用mersenne twister方案,但实现一点点试图(顺便说一句,C ++ 11将此生成器作为其标准库的一部分)。

如果你的C实现有rand_r ,你可以试试。 它允许您指定存储状态的位置。

或者只使用您自己的伪随机数生成器。

您可以使用arc4random或更好的ar4random_uniform来增加生成值的随机性(实际上ar4random_uniform证明了统一分布的值)。

在计算机上生成真正的随机数是不可能的,您只能生成“伪随机”数字,即“看起来像”随机的数字。

通常会使用具有足够熵的“种子”(小比特序列)然后通过伪随机数生成器 “扩展”它。

C rand()函数产生低质量的随机性,尝试在其他答案/评论中提出的PRNG。 一些例子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM