Python 2.7 &引用;“最佳”;生成随机浮动的方法?

Python 2.7 &引用;“最佳”;生成随机浮动的方法?,python-2.7,floating-point,Python 2.7,Floating Point,我正在开发一个程序,它可以执行大量基于偶然性的计算(疯狂,嗯!),为了使计算更容易调整到第n级,我一直在使用浮点数 我一直使用的基本格式大致如下: event_chance = 47.25 randnum = random.uniform(0.01, 100.0) if randnum <= event_chance: do_something else: dont 事件概率=47.25 randnum=随机均匀(0.01100.0) 如果randnum我怀疑你的概率略有

我正在开发一个程序,它可以执行大量基于偶然性的计算(疯狂,嗯!),为了使计算更容易调整到第n级,我一直在使用浮点数

我一直使用的基本格式大致如下:

event_chance = 47.25
randnum = random.uniform(0.01, 100.0)
if randnum <= event_chance:
    do_something
else:
    dont
事件概率=47.25
randnum=随机均匀(0.01100.0)

如果randnum我怀疑你的概率略有下降,下降了0.01%

对于这种情况,我倾向于直接使用random(),它将返回一个从0到1的浮点值,它可能是0,但永远不会是1。所以
如果(random.random()>=0.4725):…
-最坏情况下,误差应该是1/(2**19937-1)

请注意,当要求指定范围内的随机数时,有些随机数生成器会这样做,而其他随机数生成器则不包括高值(因此,对于某些随机数生成器,低值为0,高值为3的随机整数将返回0、1或2,而其他随机数生成器可能返回0、1、2或3)。阅读文档

在random.uniform的情况下,
根据方程式a+(b-a)*random()中的浮点舍入,端点值b可能包括在范围内,也可能不包括在范围内。
对于浮点数,这当然不是什么问题


当然,将两个浮点数与“=”进行比较总是有风险的。

不必挖掘太多-为随机生成器重置种子就足够了?random.seed(x)是您更改种子的地方。我对选择0.01而不是0作为低端持怀疑态度-这似乎非常武断。但是,您应该能够对其进行单元测试。收集几百万个样本,计算你点击if语句每个分支的次数。它是否足够接近目标频率?