随机数生成背后的基本逻辑是什么?

时间:2011-01-21 11:13:43

标签: .net random

private void RandomNumber_Click(object sender, EventArgs e)
        {
            Random randnumber = new Random();
            MessageBox.Show(randnumber.Next(1, 150).ToString());
        } 

在vb 6.0中生成了随机数,但如果我们退出应用程序并重新启动它,那么随机数生成的顺序与在dotnet中的顺序相同,它不像随机数生成是完美的!这怎么可能 ?它背后的逻辑是什么?

5 个答案:

答案 0 :(得分:11)

随机生成器基本上是一个确定性函数,从另一个生成一个数字。如果从给定值开始,您将始终以相同的结果结束。通常(随机化)从当前时间生成对随机生成器的第一输入(这称为种子)。 .NET只是默认使用,vb 6.0可能不是。

引自J. von Neumann

  

任何考虑产生随机数字的算术方法的人当然都处于罪恶状态。

答案 1 :(得分:2)

提供真正随机的数字一直是计算机科学中最难的挑战之一。问题没有解决。我可以向你保证,在.NET中,随机数生成绝不是“完美的”。它比VB6好一点。

Redgate Reflector认为在.NET中,Class Random()的默认构造函数提供了Environment.TickCount作为默认种子(自上次启动以来的毫秒数)。 VB6可能有一个常量作为默认值。

答案 2 :(得分:2)

在VB6中,通常会调用

Randomize Timer

每次都要获得不同的数字序列。

答案 3 :(得分:0)

在dotNet中Random类使用当前系统时间作为种子。似乎vb 6.0总是使用相同的种子。

答案 4 :(得分:0)

几天前我被告知,在实例化一个新的Random类时,它与

相同
Random r = new Random(Environment.TickCount);

这就是数字不同的原因