Python: 返回最大浮点数而不是无穷大?
我有几个函数,它们里面有很多计算,可能会返回 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