mt_srand

(PHP 4, PHP 5, PHP 7, PHP 8)

mt_srand播下一个更好的随机数发生器种子

说明

mt_srand(?int $seed = null, int $mode = MT_RAND_MT19937): void

seed 来给随机数发生器播种。 没有设定 seed 参数时,会被设为随时数。

注意: 不再需要用 srand()mt_srand() 给随机数发生器播种,因为现在是由系统自动完成的。

警告

由于 Mt19937(“梅森旋转算法”)引擎仅接受 32 位整数作为种子,因此尽管 Mt19937 的范围为 219937-1,但可能的随机序列数量仅限于 232(即 4,294,967,296)。

当依赖隐式或显式随机播种时,重复会出现得更早。根据生日问题,在少于 80,000 个随机生成的种子后,预计重复种子的概率为 50%。在随机生成大约 30,000 个种子后,重复种子的概率为 10%。

This makes Mt19937 unsuitable for applications where duplicated sequences must not happen with more than a negligible probability. 如果需要可重复的种子,Random\Engine\Xoshiro256StarStarRandom\Engine\PcgOneseq128XslRr64 引擎都支持更大的种子,它们不太可能随机碰撞。如果不需要再现性,Random\Engine\Secure 引擎提供加密安全随机性。

参数

seed

用线性同余生成器生成的值填充状态,该生成器使用解释为无符号 32 位整数的 seed 进行播种。

如果省略 seed 或为 null,则将使用随机无符号 32 位整数。

mode

使用以下一个常量指定要使用的实现算法。

  • MT_RAND_MT19937: 正确的 Mt19937 实现,自 PHP 7.1.0 起可用。
  • MT_RAND_PHP 使用不正确的梅森旋转(Mersenne Twister)实现,在 PHP 7.1.0 之前一直用于默认实现,此模式可用于向后兼容。

警告

本特性已自 PHP 8.3.0 起废弃。强烈建议不要使用本特性。

返回值

没有返回值。

更新日志

版本 说明
8.3.0 seed 现在可为 null。
7.1.0 srand() 成为 mt_srand() 的别名。
7.1.0 mt_rand() 成为使用梅森旋转(Mersenne Twister)算法的固定、正确版本。要使用旧行为,请使用 mt_srand() 并将 MT_RAND_PHP 作为第二个参数。

参见

  • mt_rand() - 通过梅森旋转(Mersenne Twister)随机数生成器生成随机值
  • mt_getrandmax() - 显示随机数的最大可能值
  • srand() - 播下随机数发生器种子