我正在使用从CenterSpace下载的 Mersenne Twister 的 C# 实现。我有两个问题:
- 无论我如何播种算法,它都没有通过DieHard 测试,我的意思是我的 p 值得到了很多 1 和 0。我对 269 个 p 值的 KStest 也是 0。好吧,我不能完全解释 p 值,但我认为结果中的几个 1 和 0 是坏消息。
- 我被要求直观地显示数字的随机性。所以我在生成数字时绘制它们,这似乎根本不是随机的。这是几秒钟后和几秒钟后结果的两张截图。正如您在第二个屏幕截图中看到的那样,数字落在一些平行线上。我尝试了不同的算法将数字映射到点。它们都产生平行线,但角度不同!这就是我将数字映射到这些屏幕截图的点的方式
new Point(number % _canvasWidth, number % _canvasHeight)
:正如您可能猜到的,视觉结果取决于表单的宽度和高度,这是一个灾难性的结果。
以下是我尝试播种算法的几种方法:
- 用户输入。我输入一些数字以将算法播种为 int 数组。
- 算法本身生成的随机数!!
- 一个数组
new Guid().GetHashCode()
我在这里想念什么?我应该如何播种算法?我怎样才能让它通过 DieHard?