生成随机浮点数的“最佳”方式?

时间:2014-11-14 00:20:00

标签: 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

这在我看来工作正常,但我知道花车以神秘的方式工作......我得到的结果我认为我是吗?即。我的事件是按照我设定的机会解雇的吗?

1 个答案:

答案 0 :(得分:2)

我怀疑你的概率略有偏差,为0.01%。

对于这样的事情,我倾向于直接使用random() - 它会返回一个从0到1的浮点 - 它可能是0,它永远不会是1.所以if (random.random()>=0.4725): ... - 最糟糕的是错误应为1 /(2 ** 19937-1)

注意,当要求指定范围内的随机数时,一些随机数生成器DO,而其他不包括高数(所以随机整数的低值为0,并且高3,对于一些随机数生成器将返回0,1或2,而其他可能返回0,1,2或3)。阅读文档。

对于random.uniform,The end-point value b may or may not be included in the range depending on floating-point rounding in the equation a + (b-a) * random().对于浮点数,这当然不是问题。

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