时间:2021-05-18
lcg_value说明
float lcg_value ( void )
lcg_value() 返回范围为 (0, 1) 的一个伪随机数。本函数组合了周期为 2^31 - 85 和 2^31 - 249 的两个同余发生器。本函数的周期等于这两个素数的乘积。
返回:范围为 (0, 1) 的伪随机数。
<?phpfor($i=0; $i<5; $i++){ echo lcg_value().PHP_EOL;}?>输出:
0.11516515851995
0.064684551575297
0.68275174031189
0.55730746529099
0.70215008878091
两种生成0~1随机小数方法进行比较
执行10万次基于mt_rand()与mt_getrandmax()算法的运行时间
<?php/** * 生成0~1随机小数 * @param Int $min * @param Int $max * @return Float */function randFloat($min=0, $max=1){ return $min + mt_rand()/mt_getrandmax() * ($max-$min);} // 获取microtimefunction get_microtime(){ list($usec, $sec) = explode(' ', microtime()); return (float)$usec + (float)$sec;} // 记录开始时间$starttime = get_microtime(); // 执行10万次获取随机小数for($i=0; $i<100000; $i++){ randFloat();} // 记录结束时间$endtime = get_microtime(); // 输出运行时间printf("run time %f ms\r\n", ($endtime-$starttime)*1000);?>输出:
run time 266.893148 ms
执行10万次lcg_value()的运行时间
<?php// 获取microtimefunction get_microtime(){ list($usec, $sec) = explode(' ', microtime()); return (float)$usec + (float)$sec;} // 记录开始时间$starttime = get_microtime(); // 执行10万次获取随机小数for($i=0; $i<100000; $i++){ lcg_value();} // 记录结束时间$endtime = get_microtime(); // 输出运行时间printf("run time %f ms\r\n", ($endtime-$starttime)*1000);?>输出:
run time 86.178064 ms
执行时间上比较,因为lcg_value()直接是php原生方法,而mt_rand()与mt_getrandmax()需要调用两个方法,并需要进行计算,因此lcg_value()的执行时间大约快3倍。
基于mt_rand()与mt_getrandmax()算法的随机效果
<?php/** * 生成0~1随机小数 * @param Int $min * @param Int $max * @return Float */function randFloat($min=0, $max=1){ return $min + mt_rand()/mt_getrandmax() * ($max-$min);} header('content-type: image/png');$im = imagecreatetruecolor(512, 512);$color1 = imagecolorallocate($im, 255, 255, 255);$color2 = imagecolorallocate($im, 0, 0, 0);for($y=0; $y<512; $y++){ for($x=0; $x<512; $x++){ $rand = randFloat(); if(round($rand,2)>=0.5){ imagesetpixel($im, $x, $y, $color1); }else{ imagesetpixel($im, $x, $y, $color2); } }}imagepng($im);imagedestroy($im);?>lcg_value()的随机效果
<?phpheader('content-type: image/png');$im = imagecreatetruecolor(512, 512);$color1 = imagecolorallocate($im, 255, 255, 255);$color2 = imagecolorallocate($im, 0, 0, 0);for($y=0; $y<512; $y++){ for($x=0; $x<512; $x++){ $rand = lcg_value(); if(round($rand,2)>=0.5){ imagesetpixel($im, $x, $y, $color1); }else{ imagesetpixel($im, $x, $y, $color2); } }}imagepng($im);imagedestroy($im);?>+ php给源码加密的方法总结:https://www.jb51.net/article/134506.html
以上就是如何在PHP中生成随机数的详细内容,更多关于PHP随机数的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
如何用php生成1-10之间的不重复随机数?例1,使用shuffle函数生成随机数。例2,使用array_unique函数生成随机数。php随机数生成函数示例
分享下php生成随机数的三种方法,生成1-10之间的不重复随机数,php生成不重复随机数的例子,需要的朋友参考下。如何用php生成1-10之间的不重复随机数?例
分享一个php生成16位随机数的代码,php生成随机数的二种方法。方法1复制代码代码如下:
PyTorch随机数生成占用CPU过高的问题今天在使用pytorch的过程中,发现CPU占用率过高。经过检查,发现是因为先在CPU中生成了随机数,然后再调用.t
我们从书本上学到什么?最明显的,也是直观的方式,在Java中生成随机数只要简单的调用:java.lang.Math.random()在所有其他语言中,生成随机数