gpt4 book ai didi

c - 当我只想要 0 或 1 时的高效随机函数

转载 作者:行者123 更新时间:2023-12-04 11:03:33 24 4
gpt4 key购买 nike

我知道您可以使用 rand() % 2 在 C 中随机选择 0 和 1,但是有没有更有效的方法?

我的问题不是特别针对 C,而是随机数生成器的工作原理。如果我理解正确的话,他们会对种子进行一些复杂的数学计算以获得 0 和 RAND_MAX 之间的均匀分布,但是如果您只需要二元选择,有没有办法减少数学计算?

谢谢

最佳答案

is there a way to do less math if you just need a binary choice?

是的,但这取决于随机分布和序列(或明显缺乏)的“好”程度。 C 没有指定 rand() 的质量。在指定随机性质量的情况下,存在替代解决方案。多快? - 这取决于 OP 未提供的许多东西。如果代码要使用 rand(),下面的代码将比简单的 rand() % 2u

略微提高性能

偶尔调用 rand() 以提取 n 个随机位,并在每次调用时使用其中的 1 个位。

此函数使用 RAND_MAX 来评估每次 rand() 调用接收到的 n 位数。 RAND_MAX == 32767 或 0x7FFF 的值表示 15 个随机位。

int rand01(void) {
// Insure RAND_MAX is a power-of-2 - 1
assert(((RAND_MAX + 1u) & RAND_MAX) == 0);

static unsigned rmax = 0;
static int rbits;
if (rmax == 0) {
rmax = RAND_MAX;
rbits = rand();
}
rmax /= 2u;
int r = rbits%2u;
rbits /= 2u;
return r;
}

请注意,此方法不会使用 srand() 完全重置随机状态。 srand() 调用不知道该函数的状态。

关于c - 当我只想要 0 或 1 时的高效随机函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45741842/

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