Random 如何量化伪随机数生成器的质量?

Random 如何量化伪随机数生成器的质量?,random,quantify,Random,Quantify,这是基于。人们提出了许多答案来产生非均匀分布,我开始想知道如何量化输出的非均匀性。我不是在寻找模式问题,只是单一价值方面 什么是公认的程序 我目前的想法是通过计算每个值的熵并取加权平均值来计算每次呼叫的平均值。然后将其与预期值进行比较 我担心的是 这是正确的吗 如何在不降低精度的情况下计算这些值 我想知道我的答案是否正确 对于#2,我担心的是我会处理像1/7+/-1e-18这样大小的数字,我担心浮点错误会让我因为最小的问题而丧命。计算的确切形式可能会导致这里的一些主要差异,我似乎记得,对于一些

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

什么是公认的程序


我目前的想法是通过计算每个值的熵并取加权平均值来计算每次呼叫的平均值。然后将其与预期值进行比较

我担心的是

  • 这是正确的吗
  • 如何在不降低精度的情况下计算这些值
  • 我想知道我的答案是否正确

    对于#2,我担心的是我会处理像1/7+/-1e-18这样大小的数字,我担心浮点错误会让我因为最小的问题而丧命。计算的确切形式可能会导致这里的一些主要差异,我似乎记得,对于一些特殊的日志情况,有一些ASM选项,但我似乎找不到关于这方面的文档


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


    我得到的是每个输出值的预期发生率。

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

    其中许多测试也被纳入Diehard PRNG测试套件中

    有很多不同的指标,因为有很多很多不同的方法来使用PRNG。你不能在真空中分析PRNG——你必须理解用例。这些工具和文档提供了很多信息来帮助您实现这一点,但在最终确定算法的适用性之前,您仍然需要了解您实际需要什么。NIST文件是完整的,尽管有点密集


    -Adam讨论了一种检查分布是否不好的方法:在字段中绘制伪随机值,然后查看它们

    TestU01的测试集比Diehard的测试集更精确。最大的测试集称为“BigCrush”,但它需要很长时间才能执行,因此也有称为“Crush”和“SmallCrush”的子集。我们的想法是首先尝试SmallCrush,如果PRNG通过,则尝试Crush,如果通过,则尝试BigCrush。如果它也通过了,那就足够好了


    你可以得到TestU01。

    不可量化,如果我在一个桶中得到0.25000000001%,眼睛将永远看不到它。