首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >给定32位无符号的ran,如何在一定范围内操作值[低,高]?

给定32位无符号的ran,如何在一定范围内操作值[低,高]?
EN

Stack Overflow用户
提问于 2013-12-07 03:55:27
回答 3查看 64关注 0票数 0

正如标题所述,我在Freescale Coldfire芯片上使用了一个随机数生成器,它返回一个32位的无符号值。据我所知,没有办法配置生成器来限制范围。在接受的范围内操纵数字的最佳方法是什么?

我正在考虑用高范围值来调整这个数字,但我仍然需要处理下界。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-07 22:01:54

是的,传统的方法是按范围进行MOD,这对于许多普通用途(模拟卡片、骰子等)来说都很好。如果范围很小(与你的发电机的32位范围相比,52的范围相当小)。这仍然是有偏见的,但这种偏见几乎是不可能被发现的。如果你的范围越大,偏差就会越大。例如,如果你想要一个随机的9位数的数字,这种偏见将是可怕的。如果你想要完全消除偏见,没有其他选择,只有做拒绝抽样-也就是说,你必须有一个循环,在其中你产生随机数,并扔掉一些。如果你做得对,你可以将所需的额外数字保持在最低限度,这样你就不会放慢速度。

票数 0
EN

Stack Overflow用户

发布于 2013-12-07 03:58:03

这篇C FAQ文章怎样才能得到一定范围内的随机整数?解释了如何正确地在范围[M,N]中生成随机数,您应该使用的公式是:

代码语言:javascript
复制
M + (random number) / (RAND_MAX / (N - M + 1) + 1)
票数 2
EN

Stack Overflow用户

发布于 2013-12-07 03:59:55

Stephan T. Lavavej解释了为什么这样做不会那么好:

从2013年土生土长- rand()被认为有害

如果你真的关心均匀的分配,坚持2的力量,或找到一些日常的抖动。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20437378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档