关于Random类的构造函数的问题

.Net技术 码拜 5年前 (2016-06-03) 423次浏览
今天做项目的时候,发现一段这个代码

var tick = DateTime.Now.Ticks;
int seed = ((int)(tick & 0xffffffffL)) | (int) (tick >>32));
Random rnd = new Random (seed)

问一下这么做的意义是什么。
他的算法就是把Ticks前后32位分开并且按位或运算一下。有啥意义啊。
这样做和直接new Random()本人知道默认就是当前时间作为seed。这两种做法有什么区别吗?》

解决方案

5

没区别,只是种子不一样而已……
一般常见做法不用guid的hash值做种子么?

3

你去问这样写的人,Random()是用什么做种子的,估计答不上来

12

原因是bug全部凑数    –>   原因是bug、于是凑数

引用:
List<int> list = new List<int>();
            for (int i = 0; i < 100; i++)
            {
                Random rnd = new Random();
                list.Add(rnd.Next(1, 100));
            }
            list.ForEach(item => Console.WriteLine(item));
List<int> list = new List<int>();
            Random rnd = new Random();
            for (int i = 0; i < 100; i++)
            {
                
                list.Add(rnd.Next(1, 100));
            }
            list.ForEach(item => Console.WriteLine(item));

这两段代码。第二个看上去正常。第一个生成的是一样的数字。
本人是不是可以这么理解:
假如传入的种子是一样的。那么他的,next方法。生成的数字也一样。
但是next执行两次,数字就不一样了。

随机数发生器内部,当然还是有规律地计算 next 数值的。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于Random类的构造函数的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)