我在使用块
中使用C#RNGCryptoServiceProviderbyte[] values = new byte[ammountToCreate];
using (RNGCryptoServiceProvider randomizer = new RNGCryptoServiceProvider())
{
randomizer.GetBytes(values);
}
然后将结果值标准化为区间[0:15],因此模偏差不应影响输出。
标准化以这种方式完成:
byte n = (byte)(this.maxRandomValue + 1);
// loop all element in the input value, an apply modulo.
for (int i = 0; i < values.Length; i++)
{
values[i] = (byte)(values[i] % n);
}
maxRandomValue等于15。
但是,从第一次测试开始,输出似乎不均匀。 我已经生成了2916个数字,这是值分布:
+-------+--------------+
| Value | % On Total |
+-------+--------------+
| 0 | 6.52% |
| 1 | 5.90% |
| 2 | 6.10% |
| 3 | 6.34% |
| 4 | 5.73% |
| 5 | 6.89% |
| 6 | 5.49% |
| 7 | 6.86% |
| 8 | 5.66% |
| 9 | 5.97% |
| 10 | 6.58% |
| 11 | 6.04% |
| 12 | 6.48% |
| 13 | 5.97% |
| 14 | 7.17% |
| 15 | 6.31% |
+-------+--------------+
如你所见: 6 - &gt;生成数字的5.49% 14 - &gt;生成数字的7.17%
我担心的是,也许我只生成了少量数字,而且体积更大,分布变得均匀。 或者,使用中的RNGCryptoServiceProvider未按预期工作。
你有什么想法吗?