Skip to main content
 首页 » 编程设计

python之生成一个随机 float ,没有范围限制,但在python中包括+inf、-inf、NaN

2025年05月04日10mfrbuaa

Python 的随机数生成器允许我们生成某个范围内的 float 。我想知道如何在没有范围约束的情况下生成 float 。我想要生成的随机 float 可以是 NaN、+inf、-inf 或介于最小和最大 float 之间的任何数字。

我正在寻找 pythonic 解决方案。谢谢。

请您参考如下方法:

返回 [a,b] 范围内值的标准伪随机数生成器是对 [a,b] 上均匀随机变量的模拟——具有清晰的数学模型。 [-infinity, +infinity] 上根本不存在任何均匀分布,因此不清楚您要模拟什么。在对您正在尝试做的事情的任何合理解释中,+inf 和 -inf 将非常罕见——那么为什么还要费心呢?您可以任意决定您希望 -inf、+inf 发生一定百分比的时间(比如百万分之一)并编写一个函数,该函数平均返回 -inf 百万分之一,+ inf 百万分之一次,其余时间返回一个大范围 float 中随机选择的数字。像这样的东西:

def extendedRandom(a,b,infProb): 
    myRoll = random.random() 
    if myRoll < infProb: 
        return float('-inf') 
    elif myRoll < 2*infProb: 
        return float('+inf') 
    else: 
        return random.uniform(a,b) 

这样使用:

>>> for i in range(20): 
    print(extendedRandom(-10**15,10**15,0.2)) 
 
-inf 
inf 
339184853623024.5 
936746547842162.5 
211578440289046.5 
inf 
-654872390518085.2 
524487814975436.5 
250131763600250.75 
-inf 
-880823611470973.4 
inf 
354024482521076.75 
-369458678524420.25 
inf 
-537391531707519.94 
-inf 
-298740652509172.0 
-inf 
-inf 

特别的——但如果你想要一个随机数生成器,它有时会抛出 + 或 - inf,那么这就可以了。