gpt4 book ai didi

c++ - 用于程序内容的快速伪随机数生成器

转载 作者:IT老高 更新时间:2023-10-28 22:32:48 32 4
gpt4 key购买 nike

我正在寻找一个伪随机数生成器,它可以专门用于在生成每个数字之前给它一个种子时快速工作。到目前为止,我见过的大多数生成器都假设您设置一次种子,然后生成一长串数字。到目前为止,唯一与我看到的有点相似的是 Perlin Noise,但它生成的数据过于“平滑”——对于类似的输入,它往往会产生类似的结果。

生成器的声明应该类似于:

int RandomNumber1(int seed);

或者:

int RandomNumber3(int seedX, int seedY, int seedZ);

我认为拥有良好的 RandomNumber1 就足够了,因为可以通过散列其输入并将结果传递给 RandomNumber1 来实现 RandomNumber3,但我编写了第二个原型(prototype)以防某些实现可以使用独立输入。

此生成器的预期用途是将其用于程序内容生成器,例如通过将树木放置在网格中并确定随机树种和每个位置的随机空间偏移来生成森林。

生成器需要非常高效(低于 500 个 CPU 周期),因为程序内容是在渲染过程中实时创建的大量内容。

最佳答案

似乎您要求的是散列函数而不是 PRNG。谷歌搜索“快速哈希函数”会产生一些看起来很有希望的结果。

For example :

uint32_t hash( uint32_t a)
a = (a ^ 61) ^ (a >> 16);
a = a + (a << 3);
a = a ^ (a >> 4);
a = a * 0x27d4eb2d;
a = a ^ (a >> 15);
return a;
}

编辑:是的,有些哈希函数看起来确实比其他函数更合适。

出于您的目的,观察函数并检查输入中的单个位变化是否会传播到许多输出位应该就足够了。

关于c++ - 用于程序内容的快速伪随机数生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/167735/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com