在 Cython 的 [0,1]
中生成随机随机数的最有效和可移植的方法是什么?一种方法是使用 C 库中的 INT_MAX
和 rand()
:
from libc.stdlib cimport rand
cdef extern from "limits.h":
int INT_MAX
cdef float randnum = rand() / float(INT_MAX)
这样使用INT_MAX
可以吗?我注意到它与你从 Python 的 max int 得到的常量完全不同:
import sys
print INT_MAX
print sys.maxint
产量:
2147483647 (C max int)
9223372036854775807 (python max int)
rand()
的正确“标准化”数是多少? EDIT 另外,如果使用从 libc 调用 rand()
的 C 方法,如何设置随机种子(例如根据当前时间播种)?
最佳答案
C 标准说 rand
返回一个范围为 0 到 RAND_MAX 的 int
,因此将其除以 RAND_MAX(来自 stdlib.h
) 是对其进行规范化的正确方法。在实践中,RAND_MAX 几乎总是等于 MAX_INT,但不要依赖它。
因为 rand
自 C89 以来一直是 ISO C 的一部分,因此保证在任何地方都可用,但不保证其随机数的质量。但是,如果可移植性是您主要关心的问题,那么这是您的最佳选择,除非您愿意使用 Python 的 random
模块。
Python 的 sys.maxint
完全是一个不同的概念;它只是 Python 可以在 它自己的 int 类型中表示的最大正数;较大的必须是多头。 Python 的 int 和 long 与 C 没有特别的关系。
关于python - 在 Cython 中生成随机数的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16138090/