[转载]161803398是一个特殊的数吗?Math.Random()里用到的

[转载]161803398是一个特殊的数吗?Math.Random()里用到的

帖子523066680 » 2014-07-18 15:45

http://www.oschina.net/news/53703/top-5 ... -questions

17063902_DhXS.jpg
17063902_DhXS.jpg (11.68 KiB) 被浏览 5503 次

引用这篇漫画的自然是吐槽各种随机数生成器坑爹的帖子,其中被顶最多的是这一篇:
161803398是一个特殊的数吗?Math.Random()里用到的

我猜答案可能是「数学原理,不解释」,但我还是希望有人能通俗地解释一下此中玄机…

起因是,我今天在鼓捣BCL的源代码,想看看以前用过的那些类是怎么实现的。因为以前没考虑过如何生成(伪)随机数的问题,所以我打算看看在这儿是怎么实现的。

全部代码在此:http://referencesource.microsoft.com/#mscorlib/system/random.cs#29
Syntax: [ Download ] [ Hide ]
<code>private const int MSEED = 161803398; </code>


每次生成Random()类的随机数种子都要用到这个MSEED值。

这个神奇的数字:161803398,我想破头也想不出它是怎么来的。它不是个质数,也不是2的某次幂,跟哪个稍微有点意义的数字都不搭边儿。我也查了它的二进制和十六进制形式,怎么看都只是一个没有特征的数字。

我Google过了,没有结果。

这个数来自于Phi值(黄金分割比)。
161803398 = 1.61803398 * 10^8 ≈ φ * 10^8

有关黄金分割比
另外,强烈推荐数学爱好者读读这一篇。
我还找到一篇含同样观点的关于随机数生成器的学术论文。(见53页)

也就是说,出于某些(也许是有道理的)原因,黄金分割比貌似很适合拿来做随机数生成器的种子……有意思的是,上面引用的那篇论文,编程语言中的伪随机数生成器,第一页就引用了上面这篇漫画。
论坛已转移 Code-By.Org 群号 322023604
头像
523066680
版主
 
帖子: 1680
注册: 2012-03-06 15:08

回到 其他

在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客

cron
Not able to open ./cache/data_global.php