Python:返回max float而不是infs?

jef*_*ott 5 python floating-point

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

In [10]: numpy.exp(5000)
Out[10]: inf
Run Code Online (Sandbox Code Playgroud)

我宁愿它返回最大浮点值:

In [11]: sys.float_info.max
Out[11]: 1.7976931348623157e+308
Run Code Online (Sandbox Code Playgroud)

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

inf = sys.float_info.max
Run Code Online (Sandbox Code Playgroud)

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

phi*_*hag 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
Run Code Online (Sandbox Code Playgroud)