gpt4 book ai didi

c# - 从 Random.NextBytes() 创建具有最小值和最大值的随机整数

转载 作者:行者123 更新时间:2023-11-30 15:24:56 26 4
gpt4 key购买 nike

标题几乎说明了一切。当然,我知道我可以使用 Random.NextInt(),但我想知道是否有一种方法可以在没有统计偏差的情况下将无界随机数据转换为有界数据。 (这意味着没有 RandomInt() % (maximum-minimum)) + minimum)。肯定有一种类似的方法,不会在它输出的数据中引入偏差?

最佳答案

如果您假设位是随机分布的,我会建议:

  • 生成足够的字节以获取范围内的数字(例如,1 个字节以获取 0-100 范围内的数字,2 个字节以获取 0-30000 范围内的数字等)。
  • 仅使用这些字节中足够的位来覆盖您需要的范围。因此,例如,如果您要生成 0-100 范围内的数字,请取您生成的字节的低 7 位
  • 将您得到的位数解释为 [0, 2n) 范围内的数字,其中 n 是位数
  • 检查数字是否在您想要的范围内。应该至少有一半的时间(平均)
  • 如果是这样,请使用它。如果不是,请重复上述步骤,直到一个数字在正确的范围内。

仅使用所需的位数是提高效率的关键 - 您将丢弃生成的字节数的一半,但不会超过一半,假设分布良好。 (而且,如果您要生成二进制范围内的数字,则无需丢弃任何东西。)

实现留给读者作为练习:)

关于c# - 从 Random.NextBytes() 创建具有最小值和最大值的随机整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31985473/

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