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)
这显然不起作用.有一种聪明的方法吗?谢谢!
您可以使用装饰器:
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)