RNGCryptoServiceProvider规范化值分布

时间:2016-10-12 16:37:31

标签: c# random rngcryptoserviceprovider

我在使用块

中使用C#RNGCryptoServiceProvider
byte[] 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未按预期工作。

你有什么想法吗?

0 个答案:

没有答案