我有一个生成随机数的程序。如何测试随机数生成器是否正在生成实际的随机数?

评论

您需要知道一个事实:这些数字是通过什么分布采样的?

您已在手动测试中对此进行了标记。这应该使用软件进行测试。

这不是一个完整的答案,但是确定事物是否随机的最佳方法之一就是尝试压缩它们。压缩通过查找模式进行工作,并且如果它们是随机的,将没有太多模式可以找到以进行压缩。

我更正了标签。

使用一个或多个RNG测试套件:Dieharder,TestU01或NIST测试。您可以在网上找到这些内容。

#1 楼

如果数字是计算机生成的,它们将不是真正的随机数,而是伪随机数。

我将转至math.stackexchange.com,以更好地了解您的问题正在尝试进行测试。

一些很好的相关问题是:

如何使用一些随机和伪随机数生成REAL随机数

这些是数字是随机的吗?

您还应该研究自动进行测试的方法。要真正测试这一点,您需要测试非常大的样本量,然后可视化结果的分布。

评论


我会采用一种更简单的方法,您将如何测试手动随机数(戴帽子)?您想验证所有数字最终都会生成。您要验证分布(数字的出现次数)。对于软件,我认为有趣的一点还在于关注性能。例如,您生成第一个数字的速度与生成最后一个数字的速度一样快吗?

– Ahmet
2012年9月7日在21:46



#2 楼

尝试使用此文档-美丽测试的第10章

对于一个简单的示例,请查看Alan Page的此示例博客文章

评论


美丽的测试一章实际上非常好,因为它谈论测试时没有涉及任何重型数学或统计信息。我真的推荐它。

– joshin4colours
2012年8月20日在17:02

如果要测试随机数生成器,为什么不应该使用繁重的数学或统计学呢?

–教育
2012年8月20日在17:28

#3 楼

有关检查发生器随机性的可能测试列表,请参见例如http://en.wikipedia.org/wiki/Statistical_randomness。 http://en.wikipedia.org/wiki/Random_number_generation提供了指向您可能对生成器感兴趣的其他内容的指针。