5

这是基于这个问题。提出了许多产生不均匀分布的答案,我开始想知道如何量化输出的不均匀性。我不是在寻找模式问题,只是在寻找单值方面。

接受的程序是什么?


我目前的想法是通过计算每个值的熵并取加权平均值来计算每次调用的平均香农熵。然后可以将其计算为预期值。

我的担忧是

  1. 这个对吗?
  2. 如何在不损失精度的情况下计算这些值?

对于#1,我想知道我是否正确。

对于#2,我担心的是我会处理大小为 1/7 +/- 1e-18 的数字,我担心浮点错误会因为除最小问题之外的任何问题而杀死我。计算的确切形式在这里可能会导致一些重大差异,我似乎记得对于一些特殊的日志案例有一些 ASM 选项,但我似乎找不到关于此的文档。


在这种情况下,使用为 range 获取一个“好”的 PRNG 并为 range[1,n]生成一个 SRNG [1,m]。问题是结果比输入差多少?

我所拥有的是每个输出值的预期发生率。

4

3 回答 3

4

NIST 有一组文档和工具,用于统计分析跨各种指标的随机数生成器。

http://csrc.nist.gov/groups/ST/toolkit/rng/index.html

其中许多测试也包含在 Dieharder PRNG 测试套件中。

http://www.phy.duke.edu/~rgb/General/rand_rate.php

有很多不同的指标,因为有很多很多不同的方式来使用 PRNG。您不能在真空中分析 PRNG - 您必须了解用例。这些工具和文档提供了大量信息来帮助您,但最终您仍然必须了解您实际需要什么,然后才能确定算法是否合适。NIST 文档是详尽的,即使有些密集。

-亚当

于 2009-02-06T21:40:34.477 回答
1

本页讨论了一种检查是否得到错误分布的方法:在字段中绘制伪随机值,然后只查看它们。

于 2009-02-06T21:48:14.630 回答
0

TestU01 的测试集比 Dieharder 更严格。最大的测试集称为“BigCrush”,但执行时间较长,因此也有仅称为“Crush”和“SmallCrush”的子集。这个想法是首先尝试 SmallCrush,如果 PRNG 通过了,就尝试 Crush,如果通过了,就尝试 BigCrush。如果它也通过了,它应该足够好。

你可以在这里得到 TestU01 。

于 2011-05-04T16:12:54.390 回答