2017-09-16 66 views
0

我的函數接收一個浮點數,並且在出現問題之前嘗試捕獲零點,但它不起作用。它掛在這裏:浮點數零和日誌

exp = -math.ceil(math.log(v, 2)) 
def logfun(v): 
    if v < 0: 
     v = -v 
    if int(v) == 0: 
     exp = 0 
    if v >= 1: 
     exp = math.floor(math.log(v, 2)) 
    if v < 1: 
     exp = -math.ceil(math.log(v, 2)) 
    return(exp) 

logfun(0.0) 

ValueError: math domain error

+1

'if int(v)== 0:'case不會阻止任何其他情況觸發。 – user2357112

回答

0

你寫:

if v < 1: 
    exp = -math.ceil(math.log(v, 2)) 

因此,這意味着,如果v0,那麼這個機構將閃光。因爲它不是elif,所以這不會有太大的影響。

您可以使用elif S,或立即return 0萬一int(v) == 0,例如:

def logfun(v): 
    if v < 0: 
     v = -v 
    if int(v) == 0: 
     return 0 
    if v >= 1: 
     return math.floor(math.log(v, 2)) 
    if v < 1: 
     return -math.ceil(math.log(v, 2))

話雖這麼說,如果v < 1,這意味着int(v) == 0在這裏,所以你可以忽略這種情況下。使它:

def logfun(v): 
    if v < 0: 
     v = -v 
    if int(v) == 0: 
     return 0 
    else: 
     return math.floor(math.log(v, 2))
+0

是的。額頭一巴掌 – cumin