<?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 ';
<?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,' '; }
0.php慢两倍。
果然“预先优化”是不靠谱的。
测试代码如下:
任何由计算机产生的随机数都是伪随机数--它们都是由不随机的数(均匀变化的数)经过某种计算产生的。
时间是均匀变化的。
在未来的某一秒产生的“随机数”是可以提前预测的--它们是确定的,并非随机。
我们之所以会觉得它们是随机的,是因为我们平时访问网页的时间是随机的,所以它们才变成了随机的。
只要网络延迟稳定,通过程序控制,在特定的时间请求服务器,就可以得到确定的数。
00.php
这是0到50的rand和你的算法的比较。rand显然更随机
它们确实使用了不同的随机数生成算法,至于谁更随机,不清楚。