gpt4 book ai didi

c# - 自定义随机数生成器

转载 作者:行者123 更新时间:2023-11-30 22:10:19 28 4
gpt4 key购买 nike

是否有可能获得一个速度极快但可靠(相同的输入 = 相同的输出,所以我不能使用时间)的伪随机数生成器?我希望最终结果类似于 float NumGen( int x, int y, int seed ); 以便它根据这三个值创建一个介于 0 和 1 之间的随机数。我找到了几个随机数生成器,但我无法让它们工作,而且 Unity 附带的随机数生成器使用起来太慢了。每 1 米的地形我必须对生成器进行大约 9 次调用,所以我真的不在乎它是否在统计上不是完全随机的,只是它工作得非常快。有谁知道适合我需要的算法?谢谢:)

最佳答案

我认为您低估了 System.Random 类。这是相当快的。我相信您的速度变慢与在每次调用 NumGen 方法时创建 Random 类的新实例有关。

在我的快速测试中,我能够在大约 1 毫秒内使用 System.Random 生成 100,000 个随机数。

为避免减速,请考虑 2D 平面中的种子点。分散种子点,使它们覆盖的距离不超过 100,000 米。然后为每个仪表关联(或计算)最近的种子点,并将该点用作 System.Random 的种子。

是的,您将生成大量您永远不会使用的随机数,但它们实际上是免费的。

伪代码:

double NumGen(x, y, distance, seed) {
Random random = new Random(seed);
double result = 0;
for (int i=0; i<distance; i++) {
result = random.NextDouble();
}
}

您可以修改这个简单的大纲以返回一个随机数序列(可能代表一个网格),并将其与缓存机制相结合。这将使您节省内存并改善(减少)CPU 消耗。

关于c# - 自定义随机数生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20935994/

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