我正在开发一个基于偶然机会执行大量计算的程序(疯狂,呵呵!),并使计算更容易调整到n度,我一直在使用浮点数号。
我使用的基本格式是:
event_chance = 47.25
randnum = random.uniform(0.01, 100.0)
if randnum <= event_chance:
do_something
else:
dont
这在我看来工作正常,但我知道花车以神秘的方式工作......我得到的结果我认为我是吗?即。我的事件是按照我设定的机会解雇的吗?
答案 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().
对于浮点数,这当然不是问题。
当然,将两个浮点数与'='进行比较总是有风险的。