码迷,mamicode.com
首页 > 其他好文 > 详细

关于用 random 生成伪随机数的一个手笔

时间:2015-11-06 16:22:32      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:

  我在想还要不要写什么文字。确实不需要太多的文字描述吧。

  前奏插一个小话题,之前在网上看到这样的冷笑话(有图的),一个程序猿调试个程序,早上怀疑某某地方的错误,下午怀疑某某地方的错误,晚上怀疑某某地方可能错了,睡觉了还是辗转反侧难以入眠。第二天早上,再看看代码的时候,无意中找到了bug,漏下了逗号“,“,哈哈冷笑话。

  我这次也是疏忽了。在一个网站的项目中,用random去生成随机数,作为上传文件的名称。当然在需要用户上传的文件中是不容易遇到这个bug的。但是在做爬虫下载文件也用这个random生成随机数的话就很可能遇到这个bug了。因为我们是用当前时间的毫秒去种子的。这里有个致命的误区:以为毫秒很小,能产生不相同的种子。但是毫秒虽小,但是程序是高速运转的,高速到不可以思议,实际上在循环中产生的种子还是相同的。这一点我忽略了。

  描述结束,上图:

 

技术分享

 

代码特写(注意产生随机数的方法):

 

技术分享

 

结果:产生的随机数的重复率是很高的,基本上是能连续重复三四个。我猜想是因为一毫秒程序能走个过程三四遍。

 

技术分享

 

我们换另一种测试方式,结果不要重复,在重复的情况下,就进入循环生成随机数。结果是生成了999个之后就进入死循环中了......

 

技术分享

 

最后,我们修改了生成随机数的方法,确保在循环中每次random的种子是不相同的。it works !!!

 

技术分享

 

我们再把循环去掉,发现,在不需要循环的情况下,一次性也能产生 10000 个不相同的随机数:

 

技术分享

 

  原创:小明

  Email:weimingyou@126.com

  Date:2015/11/06

  原文链接:小明博客园-《关于用 random 生成伪随机数的一个手笔》

关于用 random 生成伪随机数的一个手笔

标签:

原文地址:http://www.cnblogs.com/youler/p/4942733.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!