【发布时间】:2011-07-08 06:39:10
【问题描述】:
我正在尝试将一段代码从 perl 移植到 php。 perl 代码 sn-p 是 akamai 的视频点播链接生成脚本的一部分。该脚本根据视频文件的位置/ URL 生成种子(对于单个 URL,它始终是不变的)。然后它用于生成流的序列号(基本上是使用种子的 1 到 2000 之间的随机数)。这是perl代码。
$seed=6718;
srand($seed);
print(int(rand(1999)) + 1); // return 442 every time 转换后的 PHP 代码是:$seed=6718;
srand($seed);
echo(rand(0, 1999) + 1); //returns 155 every time
php rand 的行为是否与 perl one 不同?
【问题讨论】:
-
对不起,我必须:xkcd.com/221
-
依赖从
rand返回的一组一致的数字指向代码中更深层次的问题。我希望这只是一个好奇心,而不是一些移植问题。如果是后者,从 perl 和 PHP 中一次性转储“随机”数字,做任何你需要做的映射,然后移除对非随机随机数的依赖。 -
@Mark:取决于代码在做什么。例如,许多游戏提供随机地图生成,并且还会告诉您任何特定地图使用的种子,因此您可以使用该种子在未来重播同一张地图(或将其发送给朋友等),而无需提供用于“保存地图”功能。对于依赖于(伪)随机数的可重复序列,这是一个完全有效的用例。在不知道 OP 的代码做了什么的情况下,我们无法判断这样的依赖是否合适。
-
@Dave - 好点。好吧,希望它适合您的用例,而不是我的想象。
-
@Dave:是的,这是正确的。我已经相应地修改了问题。