我想生成不相关的随机数来进行模拟...但是,rand()
中C language
函数生成的数字是相关的。
是否有可能使用rand()
函数并生成多个随机流?我的意思是,如果rand()
函数为我生成一系列相关数字,我可以剪切吗?这个系列分为不同的流。然后独立使用这些流?
由于
答案 0 :(得分:2)
你确实是对的。它们通常是自相关的,因为正常的生成器实现是线性同余(尽管C标准没有强制要求)。因此,连续数字的x-y图将无法进行随机2D色散的卡方检验。
根据你的应用程序,你可以查看 Bays-Durham shuffle,据我所知,它通过了 diehard 测试的随机性:它的目的是打败自相关效应
我将您引导至www.nr.com进行实施,特别是rand1
,rand2
功能。更现代的方法是使用 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: