4.
@老虎会游泳 应该是floor(microtime(true)*100000)
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
';
7.
@老虎会游泳 杯具...预先优化是什么?不过这样取得随机数不是伪随机数 没有周期
8.
@五角圆星。在计算机中,真正的随机数是不存在的,因为计算机本身不能产生任何不确定的东西(否则机器就坏了)。
任何由计算机产生的随机数都是伪随机数--它们都是由不随机的数(均匀变化的数)经过某种计算产生的。
时间是均匀变化的。
在未来的某一秒产生的“随机数”是可以提前预测的--它们是确定的,并非随机。
我们之所以会觉得它们是随机的,是因为我们平时访问网页的时间是随机的,所以它们才变成了随机的。
只要网络延迟稳定,通过程序控制,在特定的时间请求服务器,就可以得到确定的数。
10.
@五角圆星,你的算法的周期性是$n-$m,因为2($n-$m)+$x除以($n-$m)的余数肯定与($n-$m)+$x的相等(就是$x),而且更绝的是,每个周期的函数图象都是连续的!(如果这一秒的随机数是4,下一秒一定是5!)这个算法甚至称不上伪随机!
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,'
';
}
13.
@老虎会游泳 汗.....类似自然数列了..... 对了 一般我用的是mt_rand 听说这个还随机些
14.
@五角圆星,你可以再访问一下
0.php,mt_rand比rand慢了一点点。不过这么一点没有什么影响,毕竟谁也不可能取几十万次随机数。
它们确实使用了不同的随机数生成算法,至于谁更随机,不清楚。
16. 如果是time() $_SERVER['REQUEST_TIME'] 还能再快一点