我搜索了伪RNG算法,但我发现的所有内容似乎都是通过将前一个结果用作种子来生成下一个数字。有没有办法非递归地生成它们?
我需要这个的场景是在OpenCL并发编程期间,每个线程/像素需要一个独立的RNG。我尝试使用BIG_NUMBER + work_id
播种它们,但结果中有一个强烈的视觉模式。我尝试了几种不同的RNG算法,都有这个问题。显然他们只保证数字是独立的,如果你递归生成,但不是当你使用序号作为种子时。
所以我的问题是:我可以从一系列连续数字生成一个随机数组,每个数字独立且恒定的时间吗?或者它在数学上是不可能的?
作为我的openCL问题的解决方案,我可以先递归地预先生成一大堆随机数并存储在GPU内存中,然后使用种子作为索引来使用它们。但是我对上面的问题很好奇,因为根据我对混沌理论的非常简单的理解,通过做一堆溢出和截止似乎很可能。
我可以从一系列连续数字生成一个随机数组,每个数字独立且恒定的时间吗?或者它在数学上是不可能的?
当然可以 - 在countnig模式下使用分组密码。它通常被称为Counter based RNG,第一个广泛使用的是Fortuna RNG