gpt4 book ai didi

python - 在 Cython 中生成随机数的正确方法?

转载 作者:IT老高 更新时间:2023-10-28 20:55:08 31 4
gpt4 key购买 nike

在 Cython 的 [0,1] 中生成随机随机数的最有效和可移植的方法是什么?一种方法是使用 C 库中的 INT_MAXrand():

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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com