在Python中可以生成范围[a,b]内的随机浮点数吗?
我想在Python中生成范围在[0.8, 0.9]之间的随机小数,但很不幸的是,我找到的所有工具只能生成[a, b)这个范围的随机数(比如Random.uniform(a, b)
)。
同时,我尝试了这样做:
uniform(0.8,0.90000000001)
但效果真的很糟糕。
有没有什么好的主意?
5 个回答
3
生成一个确切的端点值的概率应该是非常小的。如果你直接使用 Random.uniform(0.8,0.9)
,你担心会有什么坏结果呢?(你是否也担心你输入的 0.8
和 0.9
这两个数字实际上并不是真正的8/10和9/10呢?)
也许你的需求很特殊;但对于99.9%的应用来说,我觉得答案是:直接使用 Random.uniform(a,b)
,根本不用担心这些。
4
引用一下 random.uniform()
的说明:
在范围 [a, b) 或 [a, b] 内获取一个随机数,这取决于四舍五入的方式。
所以你根本不知道这个范围的边界值是否包含在内。不过你也不需要太在意这个问题——在 [0.8, 0.9] 这个范围内,有 900719925474100 个浮点数。即使有一个浮点数能被准确表示出来,想要随机到其中的一个也得花上很长时间,所以无论边界值是否包含在内,实际上都没有什么区别。
8
[0.8, 0.9] 和 [0.8, 0.9) 之间的区别几乎可以忽略不计。考虑到二进制浮点数的限制,我觉得它们之间甚至没有区别,因为0.9本身就无法被精确表示。所以建议使用 [0.8, 0.9)。