在Python中可以生成范围[a,b]内的随机浮点数吗?

4 投票
5 回答
7495 浏览
提问于 2025-04-16 13:21

我想在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.80.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)。

撰写回答