享受代码,享受人生

SOA is an integration solution. SOA is message oriented first.
The Key character of SOA is loosely coupled. SOA is enriched
by creating composite apps.
posts - 207, comments - 2345, trackbacks - 162, articles - 44
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

如何实现真正的随机数

Posted on 2005-03-10 17:17 idior 阅读(5590) 评论(5)  编辑 收藏 网摘 所属分类: .Net
产生随机数最重要的在于seed的选取.
通常情况下使用的是系统的时间,不过对于某些快的cpu,这种方法产生的随机数也会重复.
利用GUID的Hashcode作为seed,倒不失为一个简单有效的方法.

具体请见alphatom

Feedback

#1楼   回复  引用  查看    

2005-03-10 18:42 by Justin Shen      
好像没有什么必要吧?如果说随机数的产生和seed有关,但一个Seed可以产生一列随机数,获得一个Random的实例之后,再调用Next()之后,只和初始的Seed有关了,所以不存在CPU过快,产生相同随机数的问题。

CPU过快,产生相同随机数是因为每次new一个新的Random实例,然后在新的实例上调用Next()方法,这是误用,和Seed没关系,不然毫秒级的系统时间足够产生可用的随机数列了。

#2楼[楼主]   回复  引用  查看    

2005-03-10 21:30 by idior      
@Justin Shen
你可以试试,利用同一个seed产生的是伪随机数.至于什么是伪随机数就没有必要解释了吧.
如果用产生的那个数去做下一个种子还可以考虑,不过也会有问题.

#3楼   回复  引用    

2005-03-11 00:10 by Jun[未注册用户]
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3010824

#4楼   回复  引用    

2005-03-11 09:31 by 晕倒
问题是GUID本身的算法中也用了随机数生成的。

真正的随机是不可能的,至少目前是不可能的。

#5楼[楼主]   回复  引用  查看    

2005-03-11 09:44 by idior      
确实不太可能 只是这种方法算是比较简单有效的方法.



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 116345




相关文章:

相关链接: