Python: 返回最大浮点数而不是无穷大?

5 投票
2 回答
8699 浏览
提问于 2025-04-17 02:59

我有几个函数,它们里面有很多计算,可能会返回 inf,像这样:

In [10]: numpy.exp(5000)
Out[10]: inf

我希望它能返回最大的浮点数值:

In [11]: sys.float_info.max
Out[11]: 1.7976931348623157e+308

我可以在每次可能出现 inf 的地方加上检查,或者把每个计算都放在一个函数里,这个函数会把 inf 转换成我想要的浮点数。不过,我其实想要一个简单的方法,在每个函数的开头加上:

inf = sys.float_info.max

但显然这样是行不通的。有没有什么聪明的办法可以做到这一点?谢谢!

2 个回答

2

我不太清楚怎么“替换”无穷大这个值,但可以考虑用 min() 函数来处理。比如说,假设 x 是你要用的值,可以这样做:

return min ( [ x, sys.float_info.max ] )
3

你可以使用一个叫做装饰器的东西:

import sys
def noInf(f):
  def wrapped(*args, **kwargs):
    res = f(*args, **kwargs)
    if res == float('inf'):
      return sys.float_info.max
    return res
  return wrapped

@noInf
def myMult(x, y):
  return x*y

print(myMult(sys.float_info.max, 2)) # prints 1.79769313486e+308

撰写回答