【发布时间】:2020-03-09 03:57:59
【问题描述】:
我有一个基于硬件的布尔生成器,可以统一生成 1 或 0。如何使用它来制作一个统一的 8 位整数生成器?我目前正在使用收集的布尔值来为 8 位整数创建二进制字符串。生成的整数不是均匀分布的。它遵循this page 上解释的分布。具有 ̶a̶ ̶l̶o̶t̶ ̶o̶f̶ ̶a̶l̶t̶e̶r̶n̶a̶t̶I̶n̶g̶ ̶b̶I̶t̶s̶ 的整数具有相同数量的 1 和 0,例如 85 (01010101) 和 -86 (10101010) 最有可能生成,具有大量重复位的整数,例如 0 (000000) (11111111) 的机会最低。
这是我用每个可能的 4 位整数的概率注释的页面。我们可以看到它们并不统一。具有相同数量的 1 和 0 的 3、5、6、-7、-6 和 -4 具有 ⁶/₁₆ 概率,而所有位相同的 0 和 -1 仅具有 ¹/₁₆ 概率。
。
【问题讨论】:
-
我建议将该信息编辑到您的问题中。好问题。
-
如果您的位源有偏差,那么您需要研究一种去偏技术。 RFC 4086 给出了一些建议。冯诺依曼技术(参见 RFC 的 4.2 节)很简单,尽管还有其他方法。在某种程度上,您必须使去偏技术适合您的位源的特定偏差。
-
@rossum 它的香农熵是 0.99916596。它通过了所有 114 项更顽固的测试。其中之一被认为是弱者。您认为哪种纠偏方法最适合我的情况?
-
这是一个有趣的问题,但描述仍然不清楚。您应该明确说明如何从位构造整数。您还应该具体说明生成的整数的分布——链接到的页面上有很多东西,所以期望其他人试图弄清楚您可能在谈论哪几件事是不合理的。
-
@RobertDodier 对不起。我已经注释了页面。我希望现在更清楚一点
标签: kotlin random probability probability-theory