python - Python 有模仿 C 的 rand() 序列的函数吗?
问题描述
我正在寻找一个 Python 函数,该函数将模仿 c 中 rand() (和 srand())的行为,具有以下要求:
- 我可以在 Python 等效的 srand() 中提供相同的纪元时间来播种函数
- 如果两者都提供了相同的种子,则 rand()%256 的等效项应导致与 c 中相同的 char 值。
到目前为止,我已经考虑了随机库和 numpy 的随机库。而不是像 C 那样提供从 0 到 32767 的随机数,尽管两者都在它们的随机函数上产生从 0 到 1 的浮点数。在尝试 random.randint(0,32767) 时,我得到的结果与在我的 C 函数中时不同。
TL;DR Python 中是否存在遵循与 C 相同的随机序列的现有函数/库?
解决方案
你不能创建一个 Python 版本的rand
和srand
函数“跟随 C 的相同随机序列”,rand
因为srand
C 标准并没有准确地指定该序列是什么,即使给出了种子。尤其:
rand
使用未指定的伪随机数算法,并且该算法在 C 实现之间可能不同,包括相同标准库的版本。rand
返回值不大于RAND_MAX
,并且RAND_MAX
在 C 实现之间可能不同。
通常,在不同语言的两个程序之间“同步”PRNG 的最佳方法是在两种语言中实现相同的 PRNG。假设您没有出于信息安全目的使用伪随机数,这可能是可行的。另请参阅此问题:如何在 C#/Unity 和 Python 之间同步 PRNG?
推荐阅读
- python - Not able to pass variable to function in Python
- r - Take column from previous version and add to end of new version of csv
- ruby-on-rails - 如何获取当前对象的id?
- visual-studio - 如何在 Visual Studio 2019 中禁用单词自动突出显示?
- html - 悬停时动画伪元素
- php - PHP理论中的对象
- javascript - 为什么排序在 React 组件中不起作用
- java - 当我的程序在 BlueJ 中的文本“Gross Pay :”之后遇到“%.2f”时,它“崩溃”了
- xml - XSLT 复制除一个节点外的所有 XML 节点,有条件地修改它
- selenium - 在 docker 中执行机器人测试时见 firefox