跳至主要内容

博文

目前显示的是 六月, 2018的博文

Python 中的随机数

python 中的随机数
代码参考 /python/cpython/Lib/random.py
/moudles/_randommodule.c
python version: 3.7 random.randint 与 random.randrange python 中 randint 与 randrange 这两个函数是很常用的函数
所以来看一下,python 中是如何实现的
randint 本质上是 randrange(a, a+1),所以只要来看 randrange 就可以了 randrange(self, start, stop=None, step=1, _int=int) _int 用来尝试 将 start stop step 强制转换成 int
randrange 中用来处理数据格式与进行异常的抛出
然后返回 istart + istep*self._randbelow(n) _randbelow_randbelow(self, n, int=int, maxsize=1<<BPF, type=type,Method=_MethodType, BuiltinMethod=_BuiltinMethodType) 当 radom 函数没有被重写的时候,或者实现了新的的 getrandbits 函数时候,会使用新的函数来生成随机数 k = n.bit_length() r = getrandbits(k) while r >= n: r = getrandbits(k) return r BPF=53; python 中 float 包含的字节数为 53 所以 maxsize 是将 1 向左移动 53 位即 2 的 53 次幂
9007199254740992 random 函数被重写,但是没有新的 getrandbits 函数的时候,只能使用 random 来实现 rem = maxsize % n limit = (maxsize - rem) / maxsize r = random() while r >= limit: r = random() return int(r*maxsize) % n getrandbits 当 k <= 32 的时候 return PyLong_From…