【问题标题】:Generate random number in range [min,max] [duplicate]在 [min,max] 范围内生成随机数 [重复]
【发布时间】:2015-06-05 13:43:27
【问题描述】:

我正在使用 C 来生成 [min max] 范围内的整数随机数。我正在使用

int random_int(int min, int max) 
{
   return min + rand() % (max - min);
}

但我认为上面的代码适用于范围:[min, max),而不适用于 [min max]。你能给我看一个代码来完成我的工作吗?非常感谢

【问题讨论】:

  • @SleuthEye 好吧,那会引入偏见......
  • 需要澄清:您是在追求不可预测的随机性(据我们所知,相同的值可能会一遍又一遍地出现),还是均匀分布的有点随机(更像是一副牌的洗牌)?

标签: c


【解决方案1】:

如您所料,代码确实会生成不包含max 值的随机数。如果您需要将max 值包含在生成的随机数范围内,则范围变为[min,max+1)。所以你可以简单地修改你的代码:

int random_int(int min, int max)
{
   return min + rand() % (max+1 - min);
}

PS: 您发布的原始“模”伪随机数生成器的质量不是问题(有关 @undefinedbehaviour 的更多详细信息,请参阅 this post指在 cmets 中)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2014-10-23
    相关资源
    最近更新 更多