为什么random.uniform(0,float(“ inf”))总是返回inf?

时间:2019-03-09 10:30:39

标签: python python-3.x random

我在python中使用random模块,发现该代码总是返回inf

import random

print(random.uniform(0, float("inf")))

我想知道为什么以及是否还有另一种方法可以使它不总是返回inf

3 个答案:

答案 0 :(得分:3)

如果您调查random.uniform的来源,将会很清楚:

def uniform(self, a, b):
    "Get a random number in the range [a, b) or [a, b] depending on rounding."
    return a + (b-a) * self.random()

任何使用float('inf')的算术都将返回-infinf

在这种情况下:

b-a,其中binf的结果为infinf * self.random()inf(如果{{1 }}为负),而-infself.random()

答案 1 :(得分:1)

我不太确定为什么您会想要一个未指定范围的随机数,但是出于实际目的,使用sys.maxsize这样的上限可能就足够了。

答案 2 :(得分:1)

在无限范围内随机均匀地选取一个值等效于从一个无限集中随机均匀地选取一个元素。统一意味着您所有元素的选择概率为resample('1min') resample('3min') resample('5min') resample('15min') 。如果base为正,则您分布中的概率之和等于p,它是无限的,因此不等于1。

正如在接受的答案中提到的那样,阅读代码解释了为什么此特定实现返回p的原因,但这不是bug,这是此函数调用可以返回的唯一逻辑。但是我认为这应该引起一个错误。

请注意,您可以将随机浮点数生成(在任何时间间隔内)解释为等效于从无穷集合中选择元素,但是事实并非如此,因为我们没有使用无限精度浮点数(它们不是实数)。正是这样才能使对p*inf的调用得到明确定义。