我有多个函数可能会返回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
这显然不起作用。有一种聪明的方法吗? 谢谢!
答案 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 ] )