2011-09-24 20 views
5

我有多個計算幾個功能可能返回inf,就像這樣:Python:返回最大值float而不是infs?

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

爲什麼? (多餘字符) – Benjamin

+0

我認爲這只是要求數字問題。你要去哪裏? – NPE

+0

aix,你是對的。這個問題是由於inf/inf產生'nan',而不是'1',這是一個問題。我現在已經重新安排了這些特定的計算,所以這些爆發不會發生,從而消除了我對'inf'黑客的需求。謝謝! – jeffalstott

回答

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 
2

我不知道「替換」無限價值,但關於使用min()什麼? 喜歡的東西(假設x得到你的價值):

return min ([ x, sys.float_info.max ]) 
相關問題