是什么原因导致Microsoft不保证Random类的实现在.NET版本中保持不变?

kis*_*pit 6 .net c# versioning random

引自在线文档:

调用者注释:在.NET Framework的主要版本中,不保证Random类中随机数生成器的实现保持不变.因此,您的应用程序代码不应假定相同的种子将在.NET Framework的不同版本中产生相同的伪随机序列.

是什么原因导致Microsoft不保证Random类的实现在.NET版本中保持不变?更具体地说,微软不保证同一种子在主要版本的.NET框架中产生相同的随机数序列的原因是什么?

Rot*_*tem 14

因为生成可预测的数字不是Random该类的目的.

它的目的是生成伪随机数:

表示伪随机数生成器,该生成器生成满足某些随机性统计要求的数字序列.

生成数字的方式是实现细节.如果他们找到更好或更快的方法,他们希望保留更改权限,并给予公平警告,不要生成依赖它的代码.


Han*_*ant 7

高度投票的帖子存在问题.Random类肯定会产生可预测的数字.从Random(Int32)构造函数的文档:

向不同的随机对象提供相同的种子值使得每个实例产生相同的随机数序列.

什么微软并没有要保证的是,这个顺序将是另一个.NET框架版本相同.这是有充分理由的,他们无法确定他们使用的算法是否完全没有缺陷.使使用Random类的代码易受攻击或易于产生偏差结果的类型.赔率非常低,但不是零.

有一个先例,最臭名昭着的案例是IBM在他们的大型机软件中使用的随机生成器的一个问题,称为RANDU.被称为"被广泛认为是有史以来设计最错误的随机数发生器之一".一旦分析师开始更好地审视它,它就有明显的缺陷.它于1963年首次被标记,但在20世纪70年代仍被广泛使用.

  • Random类_does_生成可预测的数字(即_pseudo_ random),但它不是它的主要目的_.因此可以假设.Net团队没有实际的理由花时间为不同的.Net版本之间的给定种子值生成相同的生成数字. (2认同)