【发布时间】:2015-02-20 21:46:13
【问题描述】:
我正在尝试在 C# 中创建一个伪随机数生成器,它在给定相同的输入集的情况下产生相同的输出。它需要速度快,接受 64 位数字,并且特别重要的是允许任意一组输入。输出应该是 [0 和 1} 之间的双精度值。
输入大部分是在应用程序生命周期内保持不变的种子值,以及一个或多个其他数值,例如 x、y、z 和 w 坐标,它们本身可能是输入 int32、int64 或 double。
我尝试过调整我发现的其他一些随机数生成器,但我一直遇到大量的聚集问题,主要是因为我不了解围绕该主题的理论或素数的数学属性,这似乎在大多数情况下都起作用。
我想使用此函数生成随机噪声,这些随机噪声将在许多其他算法(包括我自己的算法和标准算法(例如 Perlin 噪声)等)内部使用。
我该怎么办?
【问题讨论】:
-
“特别重要的是允许任意一组输入。” - 您可以散列任何值并将该散列用作种子。
-
我刚刚得出了同样的结论,即构建我的输入的字节数组并生成它的哈希。
-
如果您要从字节数组生成哈希,您可能需要注意负零和浮点精度。
-
看起来 4D 或 5D Perlin 或 Simplex 噪声可以完成这项工作。但是 x、y、z 和 w 的目的是什么?您是否期望噪声是沿这四个维度的连续函数?听起来你真的不知道如何描述你正在寻找的噪音的属性,所以也许你应该提供更多关于你到底需要什么的细节。
-
@stslavik 实际上 PRNG 正是我想要的,但在谷歌搜索失败后,我找不到任何输入任意数量的东西,所以我想我必须做我自己的。另一个区别当然是它需要保持不变 - 即我发现了许多生成器,但它们都被设计为在连续运行时改变它们的输出。在给定相同的输入集的情况下,我希望它每次都生成相同的输出。我并不是说我下面的解决方案是完美的,但有时你只需要运行一些东西,直到有人为你指出更好的方向。