【发布时间】:2012-06-26 08:49:46
【问题描述】:
让我们解释一下我的意思。
前段时间,在用c#编写程序时,我犯了以下错误:
int Randomize()
{
Random r=new Random();
return r.Next(0,10);
}
在c#中,这是一个错误,因为连续调用多次,这个函数将返回相同的值。这是因为 Random 构造函数使用时间种子,并且调用之间的时间差太小(我花了一个小时才找到那个:))。
现在我在 php 中使用 rand(...),我需要输出始终不同,即使同时执行 2 个脚本。
我必须做些什么才能得到这个结果,还是它被设计成这样工作?
【问题讨论】:
-
让它工作吧,虽然 mt_rand() 比 rand() 好
-
好问题。我无法具体详细回答,但这些天公认的 PRNG 选择是
mt_rand,而不是rand。 -
好一个,但我认为在你的情况下很难确保输出不同,即使同时执行两个脚本
-
我的理解是PHP使用了底层系统的rand()功能。您可以(尽管我不建议这样做)尝试使用客户端 IP 和当前时间的某种组合来播种 PRNG,但是有更好的 PRNG 实现,包括基于 mersenne twister 的实现
mt_rand已经提到了