Python:返回max float而不是infs?

时间:2011-09-24 11:46:29

标签: python floating-point

我有多个函数可能会返回inf多次计算,如下所示:

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

我宁愿返回最大浮点值:

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

每次inf可能弹出时我都可以进行检查,或者将每个计算包装在一个将inf向下舍入到所需浮点数的函数中。但是,我真的很喜欢每个函数开头的简单hack,例如:

inf = sys.float_info.max

这显然不起作用。有一种聪明的方法吗? 谢谢!

2 个答案:

答案 0 :(得分:3)

您可以使用decorator

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

答案 1 :(得分:2)

我不知道'替换'无穷大值,但使用min()怎么样? 类似的东西(假设x产生你的价值):

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