使用mt_rand($min, $max)和rand($min, $max)速度有什么区别?
我需要一个PHP函数,生成与javascript Math.random()相同的种子相同的随机数.
关于math.random()的MDN:
随机数生成器从当前时间播种,如在Java中.
到目前为止我尝试了PHP的rand()生成类似的东西:
srand( time() ); // I use time as seed, like javascript does
echo rand();
Output: 827382
Run Code Online (Sandbox Code Playgroud)
并且javascript似乎以自己的方式生成随机数:
Math.random(); Output: 0.802392144203139
Run Code Online (Sandbox Code Playgroud)
我需要与math.random()等效的PHP代码,而不是新的javascript代码.我无法改变javascript.
昨天我无意中听到一个关于rand()和的话题mt_rand(),一位同事说这两个都是可以预测的,你应该使用不同的功能?我想知道,我知道rand()在某种程度上是可以预测的,并且经过一些谷歌搜索.mt_rand()如果我正确地提到这一点,甚至可以预测.
为此,我写了一小段代码,它创建了一个图像:
<?php
header("Content-type: image/png");
$im = imagecreatetruecolor(512, 512) or die("Cannot Initialize new GD image stream");
$white = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 0, 0, 0);
for ($y = 0; $y < 512; $y++) {
for ($x = 0; $x < 512; $x++) {
if (rand(0, 1)) {
imagesetpixel($im, $x, $y, $white);
}
else{
imagesetpixel($im, $x, $y, $black);
}
}
}
imagepng($im); imagedestroy($im);
?>
Run Code Online (Sandbox Code Playgroud)
此代码输出此图像,因为您可以看到它具有某种模式:

而mt_rand()函数给了我这个输出:

现在我的问题是,mt_rand() …
我需要在我的脚本中生成大约5,000个随机数,但CPU速度很快,我在随机数中看到了趋势.
例如,在100次第一次迭代中,我得到80和70之间的值与rand(0,100);这可能是一个真正的不方便.
有没有办法解决这个问题,或者2012年的随机性是否已经无法实现?
我相信有可能从执行随机次数的函数生成随机数...但我无法找出一个.