【发布时间】:2012-11-02 02:20:53
【问题描述】:
也许对此有一个非常合乎逻辑的解释,但我似乎无法理解为什么种子 0 和 2,147,483,647 使用 .NET 的 Random Class (System) 产生相同的“随机”序列。
快速代码示例:
var random1 = new Random(0);
var random2 = new Random(1);
var random3 = new Random(int.MaxValue); //2,147,483,647
var buffer1 = new byte[8];
var buffer2 = new byte[8];
var buffer3 = new byte[8];
random1.NextBytes(buffer1);
random2.NextBytes(buffer2);
random3.NextBytes(buffer3);
for (int i = 0; i < 8; i++)
{
Console.WriteLine("{0}\t\t{1}\t\t{2}", buffer1[i], buffer2[i], buffer3[i]);
}
输出:
26 70 26
12 208 12
70 134 76
111 130 111
93 64 93
117 151 115
228 228 228
216 163 216
如您所见,第一个和第三个序列是相同的。有人可以向我解释一下吗?
编辑:显然,正如 alro 所指出的,这些序列并不相同。但它们非常相似。
【问题讨论】:
-
System.Random在很多方面都被设计破坏了。这是其中之一。 -
+1 非常有趣的观察!
-
@RuudLenders 我明白了。这很奇怪。显然这个功能并不完美。 :(微软,你怎么能!
-
没有人会指出他的结果不是一样的吗?第三个和第六个数字不同。
-
@alro 没关系,因为他们所说的功能是生成一个预先计算好的种子数组。然后使用它来生成每个样本。更多种子在该数组中是相同的,并且您将获得更多随机数序列(在这种情况下,数组仅相差一项)但是......两个序列不应该重复相同的数字模式......