免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: iamlimeng

浅谈Perl的随机数 [复制链接]

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
发表于 2013-10-17 17:13 |显示全部楼层
没有仔细看,lz的帖子的意思是说Perl的解释器里面带的随机数发生程序性能不行吧,难道没人封装更好的算法吗?

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
发表于 2013-10-17 17:18 |显示全部楼层
回复 2# zhlong8
默认的 rand 只能产生 32768(0x7FFF) 个不同数字


不明觉厉了{:3_185:}
  1. my %random;
  2. my $to = 32768 + 1000;
  3. for ( 1 .. $to ) {
  4.     my $r = rand $to;
  5.     $random{$r}++;
  6. }
  7. say scalar keys %random; # 33768
复制代码
却不知道为什么会这样。打印33768

   

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
发表于 2013-10-17 17:30 |显示全部楼层
回复 12# pitonas


    编译选项可能不太一样吧,我的和楼主一样,那个数字是看源码里面写的

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
发表于 2013-10-17 17:50 |显示全部楼层
回复 14# zhlong8

厉害厉害!谢谢大牛 {:2_179:}
   

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
发表于 2013-10-18 05:55 |显示全部楼层
本帖最后由 rubyish 于 2013-10-18 01:56 编辑

我这no问题:

rand.png
  1. my ( $R, $T ) = ( 10000, 10000000 );
  2. my ( %count, $xy );
  3. $count{ int rand $R }++ for 1 .. $T;
  4. for ( 0 .. $R - 1 ) {
  5.     $count{$_} //= 0;
  6.     $xy .= "$_\t$count{$_}\n";
  7. }
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2013-10-18 07:33 |显示全部楼层
fender0107401 发表于 2013-10-17 17:13
没有仔细看,lz的帖子的意思是说Perl的解释器里面带的随机数发生程序性能不行吧,难道没人封装更好的算法吗 ...

显然楼主不是这个意思。
原帖都不看明白,那你的回帖还有什么意义

论坛徽章:
0
发表于 2013-10-18 07:38 来自手机 |显示全部楼层
你是64位系统吧?内置rand()这个参数在64位上表现正常

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2013-10-18 07:39 |显示全部楼层
zhlong8 发表于 2013-10-17 12:59
默认的 rand 只能产生 32768(0x7FFF) 个不同数字

我没看源码,但做了测试。是不是因为你和楼主是32位Perl?
我这里无论是编译的perl还是系统自带的,5.6.*,5.14.2, 5.16.2都不是32768个数字。

而且前一段时间我和伪随机数还折腾过一阵,结果是在样本足够多的时候,Perl的rand()符合正态分布。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2013-10-18 07:48 |显示全部楼层
回复 1# iamlimeng

这篇文章有点老。。
现代的伪随机数生成器都是取多种环境因素为种子做出的,不知道Perl的rand()是如何实现的。如果需要金融级别的随机数可以考虑用真随机数,比如www.random.org就是用雷暴和大气噪音产生的真随机数
   

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
发表于 2013-10-18 08:12 |显示全部楼层
本帖最后由 laputa73 于 2013-10-18 08:12 编辑

回复 16# rubyish


    请教,你们的这个图用什么弄的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP