首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从随机字节开始在间隔内生成整数随机值

如何从随机字节开始在间隔内生成整数随机值
EN

Stack Overflow用户
提问于 2014-10-21 18:04:28
回答 1查看 99关注 0票数 2

我看了看我找到的其他答案,但它们似乎不适合我的情况。

我正在与ANSI C合作,在嵌入式32位ARM系统上工作。我有一个寄存器,它产生一个随机的8位值(由芯片中的热噪声产生)。从该值中,我想在某些范围内生成均匀分布的整数值,这些值是:

0,1,2,3,4,5

0,1,2,3,4,5,6,7,8 9

“真”的随机性在我的应用中是非常重要的,我需要产生能使测量漂移的白噪声。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-21 18:11:09

RandomValue % SizeOfRange不会产生真正的随机值,因为通常情况下,进入离散的可能值是不均匀的。

我建议使用比特掩码来忽略感兴趣范围之外的所有比特,然后反复获得一个新的随机数,直到蒙面值降到所需的范围内为止。

对于范围0..5,请看最右边的3位。这将在0.7范围内产生一个值。“重播”结果为6或7。

对于范围0..9,请看最右边的5位。范围是0..16。忽略10.16的结果。

作为一个真实的词模拟,想得到一个随机数之间的1和5之间的一个6边的模具。没有“公平”的算法将6的滚动映射到所需的数字1..5中。只需重新分配一个6,直到你得到了想要的范围。

掩蔽高比特可以确保"rerolls“的数量是最小的。

一定要注意任何物理限制,你可以每隔多长时间提取一次特殊寄存器,并期望得到一个完全随机的值。

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

https://stackoverflow.com/questions/26493277

复制
相关文章

相似问题

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