四个整数的随机数

对于Perlin噪声的实现,我需要为3D空间中的每个整数坐标从n个矢量的静态列表中选择一个矢量。 这归结为从4个有符号整数值x,y,z和种子生成1..n的伪随机数。

unsigned int pseudo_random_number(int x, int y, int z, int seed);

该算法应该是无状态的,即每次使用相同的输入值调用时返回相同的数字。

我所看到的一个现有的Perlin噪声实现将每个整数乘以一个大的素数,增加结果,对它进行一些处理,并提醒n除法。 我不想只是复制这个,因为我不了解它的一些事情:

  • 如何选择素数?
  • 为什么要完成额外的位操作?
  • 我如何知道这是否“足够伪随机”以产生视觉上令人满意的结果?
  • 我寻找PRNG如何工作的解释,但我找不到任何有关多个输入值的信息。


    如果你有任意精度的伪随机数产生,那么你可以连接四个输入(x,y,z,种子),并在这个输入上调用你的伪随机数发生器函数来获得“下一个”伪随机数将作为您的随机数字。 (如果你想有一个在1和n之间的随机数),然后取适当数量的高位。

    你提到的实现使用了这样一个事实,即不同的大素数(模n)在与输入整数相乘时产生基本不相关的结果(模n)。 当然,你需要你的输入整数并不是都有一个n的通用公约数,才能工作。 这就是额外的位操作完成的原因,所以如果所有的输入整数都可以被k整除,并且n可以被k整除,那么余数n不会被k整除。 无论如何,人们已经对已建立的伪随机数生成器进行了大量的思考,所以我对你的建议是,你相信他们考虑了所有潜在的问题,并且如果有大量人群使用它们,它们的生成器是“好的”它没有投诉。

    链接地址: http://www.djcxy.com/p/37305.html

    上一篇: random number from four integers

    下一篇: Which PRNG is suited for a functional usage?