如果我每次创建一个具有不同起始种子的Random(),那么每次生成器中的第一个数字是唯一的,还是第一个数字将开始重复的点?
示例:
var random1 = new Random(1);
var value1 = random1.Next();
var random2 = new Random(2);
var value2 = random2.Next();
var random3 = new Random(x);
var value3 = random3.Next();
其中value1!= value2!= value3;
编辑:修复变量名称 我已经测试了0-80,000,000的种子,我只是想知道它们是否与0-int.Max是唯一的,或者如果第一个80,000,000是偶然的唯一
答案 0 :(得分:0)
一般来说,我不认为伪随机生成器应该在给定唯一种子的情况下生成唯一数字。
唯一认为它发生的是,给定一个种子,生成器将始终生成相同的数字序列(通过多次调用下一个方法获得),并且序列将在某个时刻重复。 但是,C#Random类使用减法生成算法,其中根据序列的先前编号生成下一个随机数。因此,数字和种子之间可能存在某种依赖关系,这使得随机数生成器每次更改种子时都会生成唯一的数字。
如果您想确定,请自行尝试使用int.MinValue
到int.MaxValue
的种子,或在此处查看C#
实施方法
https://referencesource.microsoft.com/#mscorlib/system/random.cs