【发布时间】:2026-01-06 03:35:02
【问题描述】:
我有两个关于在 .NET Framework 4.6 中实现 Random 类的问题(代码可用 here):
在构造函数末尾将
Seed参数设置为1的基本原理是什么?它似乎是从 Numerical Recipes in C (2nd Ed.) 中复制粘贴的,它在其中有意义,但在 C# 中没有。-
在书(Numerical Recipes in C (2nd Ed.))中直接说明
inextp字段设置为值31,因为:
常数 31 是特殊的;见高德纳。
但是,在 .NET 实现中,此字段设置为值 21。为什么?除了这个细节之外,其余代码似乎与书中的代码密切相关。
【问题讨论】:
-
如果你需要他,@EricLippert 在哪里?
-
但是,在 .NET 实现中,此字段设置为值 21。为什么? 他们只是选择了一个随机数 ;)
-
此外,还有一个常量 MZ 根本没有使用,取而代之的是值
0只是在那些地方使用。 -
请注意,
31显然是特殊的,因为它是两个系数之间的差异 - 55 和 24。使用 21 似乎意味着 .NET 实现的周期比原始的更短31. 至于设置Seed,这在C#中确实没有效果。