因工作需要使用php生成0~1随机小数,之前写过一篇《php生成0~1随机小数方法》,基于mt_rand()及mt_getrandmax()实现。

后来有网友评论,php原生方法lcg_value()可实现0~1随机小数生成。
lcg_value说明
float lcg_value ( void )
lcg_value() 返回范围为 (0, 1) 的一个伪随机数。本函数组合了周期为 2^31 - 85 和 2^31 - 249 的两个同余发生器。本函数的周期等于这两个素数的乘积。
返回:范围为 (0, 1) 的伪随机数。
<?php
for($i=0; $i<5; $i++){
echo lcg_value().PHP_EOL;
}
?>
输出:
0.11516515851995
0.064684551575297
0.68275174031189
0.55730746529099
0.70215008878091
两种生成0~1随机小数方法进行比较
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);
}
// 获取microtime
function 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
// 获取microtime
function 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倍。
2.随机效果比较
基于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()的随机效果
随机效果上比较,可以看出使用mt_rand()与mt_getrandmax()算法生成的随机效果较乱序,随机效果比lcg_value()较好。
总结:lcg_value()执行速度快,但随机效果不及基于mt_rand()与mt_getrandmax()算法实现。
以上这篇php lcg_value与mt_rand生成0~1随机小数的效果对比分析就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# php
# lcg
# value
# PHP中函数rand和mt_rand的区别比较
# php中随机函数mt_rand()与rand()性能对比分析
# php中mt_rand()随机数函数用法
# 深入理解PHP中mt_rand()随机数的安全
# 执行时间
# 随机数
# 给大家
# 结束时间
# 两种
# 这两个
# 希望能
# 较好
# 可以看出
# 这篇
# 速度快
# 小编
# 写过
# 大家多多
# return
# gt
# PHP_EOL
# br
# Int
# param
相关文章:
如何解决VPS建站LNMP环境配置常见问题?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
网站建设制作、微信公众号,公明人民医院怎么在网上预约?
如何在服务器上配置二级域名建站?
如何打造高效商业网站?建站目的决定转化率
如何通过WDCP绑定主域名及创建子域名站点?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
模具网站制作流程,如何找模具客户?
c++怎么用jemalloc c++替换默认内存分配器【性能】
如何通过宝塔面板实现本地网站访问?
如何快速启动建站代理加盟业务?
定制建站模板如何实现SEO优化与智能系统配置?18字教程
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
黑客如何利用漏洞与弱口令入侵网站服务器?
如何高效利用200m空间完成建站?
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
黑客如何通过漏洞一步步攻陷网站服务器?
开封网站制作公司,网络用语开封是什么意思?
兔展官网 在线制作,怎样制作微信请帖?
如何在IIS中新建站点并解决端口绑定冲突?
制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?
如何续费美橙建站之星域名及服务?
建站之星后台密码遗忘?如何快速找回?
北京网站制作的公司有哪些,北京白云观官方网站?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
制作企业网站建设方案,怎样建设一个公司网站?
如何通过西部建站助手安装IIS服务器?
寿县云建站:智能SEO优化与多行业模板快速上线指南
香港服务器如何优化才能显著提升网站加载速度?
电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?
宿州网站制作公司兴策,安徽省低保查询网站?
如何构建满足综合性能需求的优质建站方案?
简历在线制作网站免费版,如何创建个人简历?
如何挑选高效建站主机与优质域名?
定制建站流程步骤详解:一站式方案设计与开发指南
湖州网站制作公司有哪些,浙江中蓝新能源公司官网?
Android滚轮选择时间控件使用详解
淘宝制作网站有哪些,淘宝网官网主页?
建站主机类型有哪些?如何正确选型
如何在IIS中配置站点IP、端口及主机头?
,购物网站怎么盈利呢?
大连 网站制作,大连天途有线官网?
如何通过建站之星自助学习解决操作问题?
如何快速搭建高效香港服务器网站?
建站之星代理如何获取技术支持?
宝塔建站后网页无法访问如何解决?
*请认真填写需求信息,我们会在24小时内与您取得联系。