gpt4 book ai didi

c - 在没有循环的情况下生成范围外的随机数

转载 作者:太空狗 更新时间:2023-10-29 16:05:28 24 4
gpt4 key购买 nike

在 C 中,我可以使用这个简单的表达式来生成一个范围内的随机数:

rand() % (max_number + 1 - minimum_number) + minimum_number

是否有类似的非循环表达式可以生成范围外的随机数?例如,如果我的范围是从 3 到 5,我会想要一个介于 0 到 2 或 6 到 RAND_MAX 范围内的随机数。

最佳答案

这会起作用:

int r = rand() % (maxval+1 - rangesize);
if(r>=rangemin)
r+=rangesize;

在您的示例中,rangesize 将为 3,因为您要避免的范围内有三个数字,而 rangemin 将为 3,因为它是范围内的最小数字那个范围。

这将产生 [0, maxval] 范围内的随机数,[rangemin, rangemin+rangesize-1] 范围内的数字除外

但是,请注意,使用 rand() % x 通常会产生不良分布,因此如果这很重要,您需要考虑一下。感谢 rici 指出这一点。有关此的更多信息,请参阅他的回答。

但假设您有一个函数 r(lo, hi) 生成从 lohi 的均匀分布的数字,转换 if(r>=rangemin) r+=rangesize 会工作得很好,不会弄乱分布。

相关链接:

Generating a uniform distribution of INTEGERS in C

http://eternallyconfuzzled.com/arts/jsw_art_rand.aspx

关于c - 在没有循环的情况下生成范围外的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50978726/

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