手机版

php lcg_value和mt_rand生成0~1随机小数效果的对比分析

时间:2021-09-05 来源:互联网 编辑:宝哥软件园 浏览:

因为需要用php生成0~1个随机小数,我之前写过一篇文章《php生成0~1随机小数方法》,是基于mt_rand()和mt_getrandmax()的。

后来有网友评论说,php原生方法lcg_value()可以生成从0到1的随机小数。

Lcg _值描述

浮动lcg_value(无效)

Lcg_value()返回一个在(0,1)范围内的伪随机数。这个函数结合了两个周期为2 31-85和2 31-249的同余生成器。这个函数的周期等于这两个素数的乘积。

返回(0,1)范围内的伪随机数。

?PHP for($ I=0;$ i5$i ){ echo lcg_value()。PHP _ EOL}?

输出:

0.115165158519950.0646845515752970.682751740311890.557307465290990.70215008878091

两种生成0~1随机小数方法的比较

1.执行时间的比较

基于mt_rand()和mt_getrandmax()执行100,000个算法的运行时间

?Php/** *生成从0到1的随机小数* @ param int $ min * @ param int $ max * @ return float */function rand float($ min=0,$ max=1){ return $ min mt _ rand()/mt _ getrandmax()*($ max-$ min)}//get microtime函数get _ microtime () {list ($ usec,$ sec)=explode(',microtime());return(float)$ usec(float)$ sec;}//记录开始时间$ start time=get _ microtime();//执行100,000次,获取$i=0的随机小数;100000爱尔兰镑;$ I){ randFloat();}//记录结束时间$ end time=get _ microtime();//输出运行时printf('运行时% f毫秒\ r \ n ',($ end time-$ start time)* 1000);输出:运行时间266.893148毫秒

执行lcg_value () 100,000次的运行时间

?Php//Get microtime函数get _ microtime () {list ($ usec,$ sec)=explode(',microtime());return(float)$ usec(float)$ sec;}//记录开始时间$ start time=get _ microtime();//执行100,000次,获取$i=0的随机小数;100000爱尔兰镑;$ I){ lcg _ value();}//记录结束时间$ end time=get _ microtime();//输出运行时printf('运行时% f毫秒\ r \ n ',($ end time-$ start time)* 1000);输出:运行时间86.178064毫秒

与执行时间相比,由于lcg_value()直接是一个php原生方法,而mt_rand()和mt_getrandmax()需要调用两个方法并需要计算,所以lcg_value()的执行时间要快3倍左右。

2.随机效应的比较

基于mt_rand()和mt_getrandmax()算法的随机效应

?Php/** *生成从0到1的随机小数* @ param int $ min * @ param int $ max * @ return float */function rand float($ 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;512美元;$ y){ for($ x=0;$ x512$ x){ $ rand=randFloat();if(round($rand,2)=0.5){ imagesetpixel($im,$x,$y,$ color 1);}else{ imagesetpixel($im,$x,$y,$ color 2);} } } image png($ im);image destroy($ im);随机渲染:

lcg_value()的随机效应

对比随机效应,可以看到mt_rand()和mt_getrandmax()算法产生的随机效应是无序的,随机效应优于lcg_value()。

综上所述,lcg_value()速度较快,但随机效果不如基于mt_rand()和mt_getrandmax()的随机效果好。

以上对php lcg_value和mt_rand生成0~1随机小数效果的对比分析是边肖分享的全部内容。希望能给大家一个参考,支持我们。

版权声明:php lcg_value和mt_rand生成0~1随机小数效果的对比分析是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。