比较和分析性能的随机函数mt_rand()和兰德()在PHP

在本文中,对mt_rand性能()和RAND()在PHP中随机函数进行比较和分析。分享给你供你参考。具体分析如下:

在PHP中,mt_rand()和兰德()功能可以生成一个纯数字随机。它们都需要我们建立种子数据并生成它们。然后mt_rand()和RAND()会有更好的表现。让我们测试问题。

例1。mt_rand()的例子,代码如下:

复制代码代码如下:< PHP

mt_rand(回声)。n;

mt_rand(回声)。n;

mt_rand回声(5, 15);

>

此输出类似于:



十六亿零四百七十一万六千零一十四

十四亿七千八百六十一万三千二百七十八



注:从PHP 4.2.0,不再需要使用srand()或()函数mt_srand播种的随机数发生器,并已自动完成。

注:在3.0.7以前的版本中,马克斯是范围的意思,参与这些版本和相同的随机数5到15,一个简单的例子是mt_rand(5, 11)。

细节可以发现在mt_srand()(),()和()mt_getrandmax兰德相关文件。

函数返回一个随机整数。

语法:兰德(min,max)



参数
描述


分钟,马克斯
指定随机数的范围是可选的。




注意:如果没有提供可选参数min,马克斯,伦德()返回例如0和rand_max,之间的伪随机整数,5之间的随机数15(包括5和15)是兰德(5, 15)。

提示和注释

注:在某些平台(例如,Windows),rand_max仅32768。如果要求的范围是大于32768,指定最小和马克斯参数可以产生超过rand_max,或考虑mt_rand()代替它。

注:从PHP 4.2.0,它不再需要母猪随机数发生器与srand()或()函数mt_srand,现在都是自动完成的。

注:在3.0.7以前的版本中,马克斯是范围的意思,参与这些版本和相同的随机数5到15,一个简单的例子是兰德(5, 11)。

是mt_rand()快4倍比兰德真()用你自己的测试来回答这个问题,看看在线介绍。测试如下。

mt_rand()和RAND()的对比测试,测试代码如下:

复制代码代码如下:< PHP

$ max = 100000;

timeparts美元=爆炸('',瞬时());

时间=美元美元timeparts { 1 }。substr($ timeparts { 0 },1);

$ I = 0;

当($ i $ max max){

伦德();

美元+;

}

timeparts美元=爆炸('',瞬时());

时间=美元美元timeparts { 1 }。substr($ timeparts { 0 },1);

美元美元美元的时间时间时间;

在{ $ }秒中使用兰德()生成的随机数;



timeparts美元=爆炸('',瞬时());

时间=美元美元timeparts { 1 }。substr($ timeparts { 0 },1);

$ I = 0;

当($ i $ max max){

mt_rand();

美元+;

}

timeparts美元=爆炸('',瞬时());

时间=美元美元timeparts { 1 }。substr($ timeparts { 0 },1);

美元美元美元的时间时间时间;

回声{ } $最大随机数产生在{ $时间}秒使用mt_rand();;

>

试验结果如下:

第一个测试

100000个随机数在0.024894952774048秒内用兰德()生成;

使用mt_rand 0.028925895690918秒产生100000个随机数();

第二次测试

100000个随机数在0.03147292137146秒内用兰德()生成;

使用mt_rand 0.02997088432312秒产生100000个随机数();

第三测试

100000个随机数在0.028102874755859秒内用兰德()生成;

使用mt_rand 0.02803111076355秒产生100000个随机数();

第四测试

100000个随机数在0.025573015213013秒内用兰德()生成;

使用mt_rand 0.028030157089233秒产生100000个随机数();

这个结果只显示了几次结果,再进行一些测试,你会发现这两个是交替变化的,但两个没有什么不同。

mt_rand()和RAND()对比测试

我的测试环境,操作系统:Windows XP,Apache 2,php 5.2.12,2G内存

代码如下:

复制代码代码如下:< PHP

microtime_float()函数

{

列表(USEC美元美元,SEC)=爆炸(

返回((浮动)$ USEC +(浮动)$秒);

}

time_start美元= microtime_float();

($ i = 0;$ i < 1000000;+ I $ I)

{

伦德();

}

time_end美元= microtime_float();

时间time_end美元美元美元time_start;

回声兰德()花费的时间secondsn ;



time_start美元= microtime_float();

($ i = 0;$ i < 1000000;+ I $ I)

{

mt_rand();

}

time_end美元= microtime_float();

时间time_end美元美元美元time_start;

回声mt_rand()花费的时间secondsn ;

>

试验结果如下:

第一次

伦德()花费了0.25919604301453秒

mt_rand()花费0.28554391860962秒



伦德()花费了0.31136202812195秒

mt_rand()花费0.28973197937012秒

第三

伦德()花费了0.27545690536499秒

mt_rand()花费0.27108001708984秒

第四

伦德()花费了0.26263308525085秒

mt_rand()花费0.27727103233337秒

结果是一样的:两人交替使用的时间是交替的,事实上,两者之间没有什么大的区别。

PHP的mt_rand比较()和RAND()

看到很多人在网上测试,Linux和Windows,大部分的结果和我的一样:没有太大的差异,但也有人测量mt_rand(RAND))比(4倍,而是因为他们没有给出具体的测试环境,所以不能确定真正的假。我仍然相信我的结论,因为我看到有人介绍mt_rand()和RAND():

为什么不说mt_rand PHP手册()比兰德的速度快4倍()

这是因为使用的mt_rand梅森费尔托斯特alrythm(1997)是10,所以速度和兰德的区别(4次)是10年前。自2004以来,兰德开始使用alrythm,所以现在他们有速度无显著差异。

从上面的各种测试来看,它们之间没有区别,但是不同系统中的系统数量可能会有所变化。

希望本文能对大家的PHP程序设计有所帮助。