首页 > 解决方案 > Python 有模仿 C 的 rand() 序列的函数吗?

问题描述

我正在寻找一个 Python 函数,该函数将模仿 c 中 rand() (和 srand())的行为,具有以下要求:

  1. 我可以在 Python 等效的 srand() 中提供相同的纪元时间来播种函数
  2. 如果两者都提供了相同的种子,则 rand()%256 的等效项应导致与 c 中相同的 char 值。

到目前为止,我已经考虑了随机库和 numpy 的随机库。而不是像 C 那样提供从 0 到 32767 的随机数,尽管两者都在它们的随机函数上产生从 0 到 1 的浮点数。在尝试 random.randint(0,32767) 时,我得到的结果与在我的 C 函数中时不同。

TL;DR Python 中是否存在遵循与 C 相同的随机序列的现有函数/库?

标签: pythoncrandom

解决方案


你不能创建一个 Python 版本的randsrand函数“跟随 C 的相同随机序列”,rand因为srandC 标准并没有准确地指定该序列是什么,即使给出了种子。尤其:

  • rand使用未指定的伪随机数算法,并且该算法在 C 实现之间可能不同,包括相同标准库的版本
  • rand返回值不大于RAND_MAX,并且RAND_MAX在 C 实现之间可能不同。

通常,在不同语言的两个程序之间“同步”PRNG 的最佳方法是在两种语言中实现相同的 PRNG。假设您没有出于信息安全目的使用伪随机数,这可能是可行的。另请参阅此问题:如何在 C#/Unity 和 Python 之间同步 PRNG?


推荐阅读