Why rand() isn't really random?

扶醉桌前 提交于 2019-12-04 22:35:09

问题


I wanted to put random points on an image (stars in space for some little fun side project)

I have this simple script.

<?php
$gd = imagecreatetruecolor(1000, 1000);
$white = imagecolorallocate($gd, 255, 255, 255);

for ($i = 0; $i < 100000; $i++) 
{
    $x = rand(1,1000);
    $y = rand(1,1000);

    imagesetpixel($gd, round($x),round($y), $white);
}

header('Content-Type: image/png');
imagepng($gd);
?>

Keep in mind this is just for testing, that is why I put 100000 in for loop so it shows the pattern I noticed emerging. We have 1 million pixel to use, still random X and Y creates this pattern instead:

So it is far from random. I know rand is not real random, that is why it isn't good for cryptography. But I find no information about how it works and what should I do to avoid patterns like this.


回答1:


Linear congruential random number generators (which is what PHP rand uses) will always display autocorrelation effects on an x-y plot.

You will have better results with mt_rand. This is a Mersenne Twister generator.



来源:https://stackoverflow.com/questions/31675295/why-rand-isnt-really-random

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!