作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道您可以使用 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/
我目前在我的 master 分支上。我需要 CSS 方面的帮助,但不幸的是我的网站受身份验证保护。这使得其他人很难来我的站点进行调试。我计划开始一个新的分支,fixing_css,第一次提交删除所有身
我是一名优秀的程序员,十分优秀!