已掉线,重新登录

首页 > 绿虎论坛 > 历史版块 > 编程 > PHP > 讨论/求助

标题: 我写得随机数函数,绝对比rand快!

作者: @Ta

时间: 2012-08-11

点击: 6160

function _rand($m,$n)
return time()%($n-$m)+$m;
@老虎会游泳 你有什么看法?如果time()的单位是微秒就更好啦

[隐藏样式|查看源码]


『回复列表(17|隐藏机器人聊天)』

1. 可否解释是什么意思?
(/@Ta/2012-08-11 12:14//)

2. @五角圆星,用microtime(true)*1000
(/@Ta/2012-08-11 12:15//)

3. @浪人 取区间[$m,$n]之间的随机数
(/@Ta/2012-08-11 12:21//)

4. @老虎会游泳 应该是floor(microtime(true)*100000)
(/@Ta/2012-08-11 12:22//)

5. 楼主发帖辛苦了!
(/@Ta/2012-08-11 12:35//)

6. @五角圆星,很遗憾。
0.php慢两倍。
果然“预先优化”是不靠谱的。
测试代码如下:
<?php
function _rand($m,$n) {return time()%($n-$m)+$m;}
echo 'rand ';
$t=microtime(true);
for($i=1000000;$i>0;$i--) rand(100,50000);
echo microtime(true)-$t,'s
';
echo '_rand ';
$t=microtime(true);
for($i=1000000;$i>0;$i--) _rand(100,50000);
echo microtime(true)-$t,'s
';
(/@Ta/2012-08-11 12:58//)

7. @老虎会游泳  杯具...预先优化是什么?不过这样取得随机数不是伪随机数 没有周期
(/@Ta/2012-08-11 13:02//)

8. @五角圆星。在计算机中,真正的随机数是不存在的,因为计算机本身不能产生任何不确定的东西(否则机器就坏了)。
任何由计算机产生的随机数都是伪随机数--它们都是由不随机的数(均匀变化的数)经过某种计算产生的。
时间是均匀变化的。
在未来的某一秒产生的“随机数”是可以提前预测的--它们是确定的,并非随机。
我们之所以会觉得它们是随机的,是因为我们平时访问网页的时间是随机的,所以它们才变成了随机的。
只要网络延迟稳定,通过程序控制,在特定的时间请求服务器,就可以得到确定的数。
(/@Ta/2012-08-11 13:41//)

9. @老虎会游泳  数学书上说伪随机数是有周期的......
(/@Ta/2012-08-11 13:51//)

10. @五角圆星,你的算法的周期性是$n-$m,因为2($n-$m)+$x除以($n-$m)的余数肯定与($n-$m)+$x的相等(就是$x),而且更绝的是,每个周期的函数图象都是连续的!(如果这一秒的随机数是4,下一秒一定是5!)这个算法甚至称不上伪随机!
(/@Ta/2012-08-11 14:00//)

11. @老虎会游泳 ......好像是的耶
(/@Ta/2012-08-11 14:07//)

12. @五角圆星
00.php
这是0到50的rand和你的算法的比较。rand显然更随机
<?php
echo 'rand
';
for($i=0;$i<50;$i++) {
srand($i); //用指定的数代替microtime()来产生随机数
echo $i,' -> ',rand(50,10000),'
';
}
echo '_rand
';
for($i=0;$i<50;$i++) {
echo $i,' -> ',$i%(10000-50)+50,'
';
}
(/@Ta/2012-08-11 14:15//)

13. @老虎会游泳 汗.....类似自然数列了.....  对了 一般我用的是mt_rand 听说这个还随机些
(/@Ta/2012-08-11 14:17//)

14. @五角圆星,你可以再访问一下0.php,mt_rand比rand慢了一点点。不过这么一点没有什么影响,毕竟谁也不可能取几十万次随机数。
它们确实使用了不同的随机数生成算法,至于谁更随机,不清楚。
(/@Ta/2012-08-11 14:34//)

15. 0.php已经被其他代码取代了。
(/@Ta/2012-08-12 19:21//)

16. 如果是time() $_SERVER['REQUEST_TIME'] 还能再快一点
(/@Ta/2013-06-23 20:58//)

17. 长知识了,干粮呀!
(/@Ta/2014-02-14 22:55//)

回复需要登录

8月24日 06:54 星期天

本站由hu60wap6驱动

备案号: 京ICP备18041936号-1