[0,1]在Cython中生成随机随机的最有效和最便携的方法是什么?一种方法是使用INT_MAX和rand()来自C库:
from libc.stdlib cimport rand
cdef extern from "limits.h":
int INT_MAX
cdef float randnum = rand() / float(INT_MAX)
Run Code Online (Sandbox Code Playgroud)
这样使用INT_MAX可以吗?我注意到它与你从Python的max int得到的常量完全不同:
import sys
print INT_MAX
print sys.maxint
Run Code Online (Sandbox Code Playgroud)
收益率:
2147483647 (C max int)
9223372036854775807 (python max int)
Run Code Online (Sandbox Code Playgroud)
哪个是正确的"标准化"数字rand()? 编辑另外,如果使用rand()从libc 调用的C方法,如何设置随机种子(例如根据当前时间播种)?
Cai*_*von 11
C标准表示rand返回int0到RAND_MAX(包括0和RAND_MAX)的范围,因此将其除以RAND_MAX(from stdlib.h)是规范化它的正确方法.实际上,RAND_MAX几乎总是等于MAX_INT,但不依赖于此.
因为rand自C89以来已经成为ISO C的一部分,所以它保证可以在任何地方使用,但不保证其随机数的质量.如果可移植性是您主要关注的问题,那么它是您的最佳选择,除非您愿意使用Python的random模块.
Python sys.maxint完全是一个不同的概念; 它只是Python在其自己的 int类型中可以表示的最大正数; 较大的将不得不长.Python的整数和长期与C并不特别相关.