PHP随机浮点数生成器
我是新来PHP的,所以很抱歉,如果这是混乱的,我已经环顾了StackOverflow,但我找不到任何适合我需要的东西 我正在尝试创建一个随机浮点数列表。但我遇到的问题是,每次我运行列表时,它都会打印出相同的数字。有人能解释一下为什么每次迭代都有不同的数字吗 谢谢你的帮助PHP随机浮点数生成器,php,random,Php,Random,我是新来PHP的,所以很抱歉,如果这是混乱的,我已经环顾了StackOverflow,但我找不到任何适合我需要的东西 我正在尝试创建一个随机浮点数列表。但我遇到的问题是,每次我运行列表时,它都会打印出相同的数字。有人能解释一下为什么每次迭代都有不同的数字吗 谢谢你的帮助 <?php function frand($min, $max, $decimals = 0) { mt_srand(microtime()); $scale = pow(10,
<?php
function frand($min, $max, $decimals = 0) {
mt_srand(microtime());
$scale = pow(10, $decimals);
return mt_rand($min * $scale, $max * $scale) / $scale;
}
for ($x = 1; $x <= 45; $x++) {
echo frand(1, 17, 8) . "<br/>";
}
?>
您应该使用
mt_srand(microtime())代码>在脚本中只运行一次
请注意,您的代码运行速度肯定会超过1微秒。因此,microtime()
将返回相同数量的微秒,mt\u srand
将生成相同的种子,这将对mt\u rand
产生相同的结果
请尝试改用以下代码:
<?php
function frand($min, $max, $decimals = 0) {
$scale = pow(10, $decimals);
return mt_rand($min * $scale, $max * $scale) / $scale;
}
mt_srand(microtime());
for ($x = 1; $x <= 45; $x++) {
echo frand(1, 17, 8) . "<br/>";
}
?>
您应该使用mt_srand(microtime())代码>在脚本中只运行一次
请注意,您的代码运行速度肯定会超过1微秒。因此,microtime()
将返回相同数量的微秒,mt\u srand
将生成相同的种子,这将对mt\u rand
产生相同的结果
请尝试改用以下代码:
<?php
function frand($min, $max, $decimals = 0) {
$scale = pow(10, $decimals);
return mt_rand($min * $scale, $max * $scale) / $scale;
}
mt_srand(microtime());
for ($x = 1; $x <= 45; $x++) {
echo frand(1, 17, 8) . "<br/>";
}
?>
像这样试试
function frand($min, $max, $decimals = 0) {
$scale = pow(10, $decimals);
return mt_rand($min * $scale, $max * $scale) / $scale;
}
for ($x = 1; $x <= 45; $x++) {
echo frand(1, 17, 8) . "<br/>";
}
mt_srand(microtime());
函数frand($min、$max、$decimals=0){
$scale=pow(10,$decimals);
返回mt_rand($min*$scale,$max*$scale)/$scale;
}
对于($x=1;$x请这样尝试
function frand($min, $max, $decimals = 0) {
$scale = pow(10, $decimals);
return mt_rand($min * $scale, $max * $scale) / $scale;
}
for ($x = 1; $x <= 45; $x++) {
echo frand(1, 17, 8) . "<br/>";
}
mt_srand(microtime());
函数frand($min、$max、$decimals=0){
$scale=pow(10,$decimals);
返回mt_rand($min*$scale,$max*$scale)/$scale;
}
对于($x=1;$x您应该只调用srand()
或mt\u srand()
一次。它们初始化随机数生成器。您的代码在每次调用mt\u rand()
之前调用它,因为函数frand()
只需不到一微秒的时间即可完成,每次都用相同的值初始化随机数生成器
正如前面所说,不需要调用mt_srand()
,因为PHP解释器会为您执行此操作
需要调用mt_-rand()
的唯一情况是,您特别需要始终获得相同的随机数序列;在这种情况下,您需要使用受控值来初始化它,而不是当前时间。您应该调用srand()
或mt_-srand())
仅一次。它们初始化随机数生成器。在每次调用mt_rand()
之前,您的代码都会调用它,因为函数frand()
需要不到一微秒的时间才能完成,所以您每次都用相同的值初始化随机数生成器
正如前面所说,不需要调用mt_srand()
,因为PHP解释器会为您执行此操作
唯一需要调用mt_rand()的情况
是指您特别需要始终获得相同的随机数序列;在这种情况下,您需要使用受控值来初始化它,而不是当前时间。@GavW让我知道它是否对you@GavW是的,我也很好奇,因为php运行的是mt_srand()
在脚本的开头。如果没有最后一行,您的代码也能正常工作。@GavW请告诉我它对脚本是否有用you@GavW是的,我也很好奇,因为php运行的是mt_srand()
在脚本的开头。如果没有最后一行,您的代码也能正常工作。感谢您提供的有用建议。感谢您提供的有用建议。