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

时间:2014-03-27 11:45:24

标签: c random

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

由于

4 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

通常人们会使用种子''''' (小比特序列)具有足够的熵然后"扩展"感谢Pseudo-Random-Number-Generator

C rand()函数会产生较差的随机性,尝试在其他答案/评论中提出的PRNG。一些examples