gpt4 book ai didi

language-agnostic - 将伪随机数限制在较小范围内的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-04 07:50:25 26 4
gpt4 key购买 nike

将 PRNG 的值限制在较小范围内的最佳方法是什么?如果您使用模数并且旧的最大数不能被新的最大数整除,则您偏向于 0通过 (old_max - new_max - 1) .我认为最好的方法是这样的(这是浮点数,而不是整数数学)

random_num = PRNG() / max_orginal_range * max_smaller_range
但是我的直觉让我质疑该方法(可能是浮点实现和表示差异?)。
随机数生成器将在硬件和软件平台上产生一致的结果,约束也需要如此。
我怀疑上面的伪代码是正确的(但不是因为我想的原因)。 MichaelGG的 answer让我以不同的方式思考问题。我可以使用较小的数字对其进行建模并测试每个结果。因此,让我们假设我们有一个 PRNG,它产生一个 0 到 31 之间的随机数,并且您希望较小的范围是 0 到 9。如果使用模数,则偏向于 0、1、2 和 3。如果使用伪代码上面你偏向于 0、2、5 和 7。我认为没有什么好的方法可以将一组映射到另一组。到目前为止我想出的最好的方法是重新生成大于 old_max/new_max 的随机数。 ,但这也有很深的问题(减少周期、生成新数字的时间,直到一个数字在正确的范围内,等等)。
我想我可能天真地处理了这个问题。可能是时候开始对文献进行一些认真的研究了(之前必须有人解决过这个问题)。

最佳答案

我知道这可能不是一个特别有用的答案,但我认为最好的方法是设想几种不同的方法,然后尝试它们几百万次,然后检查结果集。

如有疑问,请自行尝试。

编辑

应该注意的是,许多语言(如 C#)在其功能中都内置了限制

int maximumvalue = 20;
Random rand = new Random();

rand.Next(maximumvalue);

只要有可能,您应该使用它们而不是您自己编写的任何代码。不要重新发明轮子。

关于language-agnostic - 将伪随机数限制在较小范围内的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/734482/

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