【问题标题】:How to quantify the quality of a pseudorandom number generator?如何量化伪随机数生成器的质量?
【发布时间】:2009-02-06 21:28:24
【问题描述】:

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

可接受的程序是什么?


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

我的担忧是

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

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

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


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

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

【问题讨论】:

    标签: random quantify


    【解决方案1】:

    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 文档是详尽的,即使有些密集。

    -亚当

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 无法量化,如果我在一个桶中得到 0.25000000001%,眼睛永远看不到它。
      【解决方案3】:

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

      你可以得到TestU01here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-18
        • 1970-01-01
        • 2014-10-30
        • 2015-08-07
        • 1970-01-01
        • 1970-01-01
        • 2023-01-03
        • 1970-01-01
        相关资源
        最近更新 更多