是否有标准和/或可移植的方式来表示C(++)程序中最小的负值(例如,使用负无穷大)?
float.h中的DBL_MIN是最小的正数.
[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方法,如何设置随机种子(例如根据当前时间播种)?
生成伪统一随机数([0,1中的双精度数])的最佳方法是:
3年前也有类似的文章,但是很多答案并不符合所有标准。例如,drand48特定于POSIX。
我知道的(但不确定)满足所有某些条件的唯一方法是:
from libc.stdlib cimport rand, RAND_MAX
random = rand() / (RAND_MAX + 1.0)
Run Code Online (Sandbox Code Playgroud)
注意@ogrisel 大约在3年前问了同样的问题。
编辑
调用rand不是线程安全的。感谢您指出@DavidW。