C# 有人能解释这个系统吗?随机算法?

C# 有人能解释这个系统吗?随机算法?,c#,algorithm,knuth,C#,Algorithm,Knuth,有人能解释一下使用不同值的影响吗 CLR System.Random(Random.cs,61)似乎引用了使用的算法 //This algorithm comes from Numerical Recipes in C (2nd Ed.) 并使用这行代码(random.cs,80) 然而,看看正在使用的明显算法(C,283中的数字配方) (Knuth 124)讨论了随机数生成曲线下的分布区域被分成31个矩形 我不是数学天才,试图遵循这个算法会让我的大脑有点受伤 random.cs。Micros

有人能解释一下使用不同值的影响吗

CLR System.Random(Random.cs,61)似乎引用了使用的算法

//This algorithm comes from Numerical Recipes in C (2nd Ed.)
并使用这行代码(random.cs,80)

然而,看看正在使用的明显算法(C,283中的数字配方)

(Knuth 124)讨论了随机数生成曲线下的分布区域被分成31个矩形

我不是数学天才,试图遵循这个算法会让我的大脑有点受伤

random.cs。Microsoft参考源.NET Framework 4.8

Teukolsky等出版社,《C中的数字配方:科学计算的艺术》,第二版。

Donald Knuth,《计算机编程艺术》第3版,第2卷半数值算法

据我所知,这不是一个有意识的决定,而是一个打字错误。我现在找不到更权威的消息来源,所以我没有将此作为答案发布,而是作为评论发布。我找到了一个与此特定问题相关的bug报告的存档链接。简言之,Random(超过1个)存在一些已知问题,github和其他地方通常会讨论该分布。由于各种原因,它们似乎永远不会被修复(即使在.NETCore中),主要是因为更改算法可能会对依赖种子的代码库执行太多破坏性的更改。此外,BCL中还有更好的算法。就个人而言,阅读为什么应该修复它是令人沮丧的,总是有一些演员说废话废话,让我们不要,没有进展…如果你对发电机的实际力学感兴趣,这可能更像是一个统计/数学问题。如果你对C#generator的实际问题感兴趣,可以在互联网的各个地方找到它。如果你对更好的C#实现感兴趣,我相信还有很多,甚至Eric Lippert和他的同事也有博客围绕着这些伟大的信息人。非常感谢。我的好奇心得到了满足。
 inextp = 21;    
 
 
 inextp=31; The constant 31 is special; see Knuth.