相关疑难解决方法(0)

C/C++中的最小双精度值

是否有标准和/或可移植的方式来表示C(++)程序中最小的负值(例如,使用负无穷大)?

float.h中的DBL_MIN是最小的数.

c c++ math

78
推荐指数
7
解决办法
11万
查看次数

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

[0,1]在Cython中生成随机随机的最有效和最便携的方法是什么?一种方法是使用INT_MAXrand()来自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方法,如何设置随机种子(例如根据当前时间播种)?

python random numpy cython

19
推荐指数
1
解决办法
7604
查看次数

在Cython中生成随机数的规范方法

生成伪统一随机数([0,1中的双精度数])的最佳方法是:

  1. 跨平台(理想情况下具有相同的样品序列)
  2. 线程安全(显式传递prng的突变状态或在内部使用线程局部状态)
  3. 没有GIL锁
  4. 可轻松包装在Cython中

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。

random multithreading cython

2
推荐指数
1
解决办法
771
查看次数

标签 统计

cython ×2

random ×2

c ×1

c++ ×1

math ×1

multithreading ×1

numpy ×1

python ×1