随机数的种子

shuang121 2010-12-12 12:26:55
有个问题一直搞不懂,随机数的种子到底是做什么的

比如 Random random=new Random(5);

int num=random.bext();

这个num就一直不变

这是什么回事呢,知道的请留言。tks
...全文
632 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
eclair1bb 2012-07-23
  • 打赏
  • 举报
回复
LZ把Random random=new Random(5);这里面的5去掉就可以了,
5是随机种子,你确定了种子,随机数就不变了。


friedDuck 2010-12-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 abrianna 的回复:]

刚也去看了看msdn,怎么感觉好像写错了啊。如果每次用系统时钟来初始化,为啥每次默认的无参构造函数创建的Random生成结果都一样?没太看懂。
[/Quote]

要sleep(1)的,不然系统时间没更新
yangquanlaohou 2010-12-13
  • 打赏
  • 举报
回复
随机数生成算法是计算数学领域里面的著名课题。
加油馒头 2010-12-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 abrianna 的回复:]
刚也去看了看msdn,怎么感觉好像写错了啊。如果每次用系统时钟来初始化,为啥每次默认的无参构造函数创建的Random生成结果都一样?没太看懂。
[/Quote]

因为取的时间精度 大于你 程序运行速度的精度

也就是说 你 程序循环几次,实际上取的时间是一样的

shuang121 2010-12-12
  • 打赏
  • 举报
回复
还是有点不懂,那么我写的这个有什么用呢, 不用种子不也可以吗,为什么要使用种子呢?我的QQ是475280068
wuyq11 2010-12-12
  • 打赏
  • 举报
回复
计算机不可能产生完全随机的数字。所谓的随机数发生器都是通过一定的算法对事先选定的随机种子做复杂的运算,用产生的结果来近似的模拟完全随机数,这种随机数被称作伪随机数。伪随机数是以相同的概率从一组有限的数字中选取的
无重复
Random rand = new Random(Guid.NewGuid().GetHashCode());
兔子-顾问 2010-12-12
  • 打赏
  • 举报
回复
因为这叫伪随机数,根据一个常量,每次的结果定然一样的,实际上当算法固定后,输出的结果是已知固定的。所以你固定是5,结果总是一样的,你可以定义到函数外,作为成员变量,初始化后,每次获得的就不同了。但每次软件运行第n次总是和下次软件运行一致,所以你可以用当前操作系统启动的时间戳来做种子,相对来说会算是随机。
Random random=new Random(Environment.TickCount);
abrianna 2010-12-12
  • 打赏
  • 举报
回复
刚也去看了看msdn,怎么感觉好像写错了啊。如果每次用系统时钟来初始化,为啥每次默认的无参构造函数创建的Random生成结果都一样?没太看懂。
threenewbee 2010-12-12
  • 打赏
  • 举报
回复
事实上,软件产生的随机数,都是伪随机数。好的伪随机数可以在绝大多数的实验中保持随机性,但是总是通不过一些实验。

随机数生成算法是计算数学领域里面的著名课题。
vrhero 2010-12-12
  • 打赏
  • 举报
回复
要想真正理解这个问题你得先了解何为随机数、何为伪随机数及伪随机数算法....你得去补习高等数学...

NET的随机数算法采用Donald Knuth的减随机数生成器算法...随机数的生成是从种子值开始,如果反复使用同一个种子,就会生成相同的数字系列...对于Random类,如果未指定种子值,则采用当前系统时钟值为种子...
[Quote=引用 MSDN:]
默认情况下,Random 类的无参数构造函数使用系统时钟生成其种子值,而参数化构造函数可根据当前时间的计时周期数采用 Int32 值。但是,因为时钟的分辨率有限,所以,如果使用无参数构造函数连续创建不同的 Random 对象,就会创建生成相同随机数序列的随机数生成器。[/Quote]
#blackheart 2010-12-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wuyq11 的回复:]
计算机不可能产生完全随机的数字。所谓的随机数发生器都是通过一定的算法对事先选定的随机种子做复杂的运算,用产生的结果来近似的模拟完全随机数,这种随机数被称作伪随机数。伪随机数是以相同的概率从一组有限的数字中选取的
无重复
Random rand = new Random(Guid.NewGuid().GetHashCode());
[/Quote]
+1

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧