我正在寻求创建随机数,因为由于某些情况我无法使用该random库。基本上,我希望能够使用纯python 复制random.randint()和random.random()方法。
我不希望有人在python中转储整个代码(尽管那会很棒),但是有人可以向我介绍类似的C / C ++ / Java算法,该算法可以轻松地复制到python中吗?
编辑:我正在寻找有关如何使用python代码创建随机数的参考,而不是我自己不这样做并找到使用方式random或numpy.random不惜一切代价的原因
由于您被迫在在线IDE上使用,因此我将假定这是课程的工作,并且您不需要最新,最好,最可靠的随机数生成器。取而代之的是,您只需要一些足以完成临时课程的内容。
在这种情况下,用于生成随机数的常见算法是线性同余生成器。典型参数:
>>> def r(seed=[0], m=2**32, a=1664525, c=1013904223):
... seed[0] = (a*seed[0] + c) % m
... return seed[0]
...
Run Code Online (Sandbox Code Playgroud)
该算法返回假定为0到(2 ** 32)-1的随机整数。
以下是一些示例结果:
>>> r()
1013904223
>>> r()
1196435762
>>> r()
3519870697
Run Code Online (Sandbox Code Playgroud)
您可以在此处阅读有关此算法的更多信息。
除非更改种子,否则该算法将始终在定义函数后从同一点开始。
同样,这不是认真的工作,对于这些工作而言,结果的质量很重要。
random.random和random.randint要返回介于0和1之间的“随机”数字[0,1),请使用上述函数r:
def random():
return r() / 2**32
Run Code Online (Sandbox Code Playgroud)
同样适用于random.randint:
def randint(a, b):
return int(a + (1 + b - a) * r() / 2**32)
Run Code Online (Sandbox Code Playgroud)
如果min 的值r已更改,则也2**32应在此处更改。
| 归档时间: |
|
| 查看次数: |
1186 次 |
| 最近记录: |