我定義了一個分段函數是這樣的:分段函數不工作
def C1(d,x):
if ((x<d/2) and (x>-d/2)):
return (1/d)
else:
return 0
但它總是返回我0
In [23]: C1(1000,1)
Out[23]: 0
我定義了一個分段函數是這樣的:分段函數不工作
def C1(d,x):
if ((x<d/2) and (x>-d/2)):
return (1/d)
else:
return 0
但它總是返回我0
In [23]: C1(1000,1)
Out[23]: 0
在Python,除號運算符(/)執行整數除法,這意味着任何小數點被截斷,如果分子和分母均爲整數。所以當你這樣做時(1/d),1和d都是整數,例如1/1000即爲0.001,但是在整數除法中,你會丟失小數,所以你會得到0.爲了解決這個問題,您定義的數字通過添加一個.0浮動。例如,(x < d/2.0)和(x> -d/2.0)和(1.0/d)這應該會給你正確的結果。
這是一件很重要的事情,但這個答案可以做一些額外的解釋。有了一個合適的編輯我會upvote這一點。 – shuttle87
基本上,'__future__'' division'導入時,'/'運算符變成了「真」分區;用'int'除以int將總是產生一個'float'來確保結果(大部分)是準確的(儘管浮點有它自己的怪癖)。有或沒有進口,'//'是地板劃分;對於正整數,這意味着像C中一樣截斷整數數學,對於負整數,則舍入(例如'1 // 2 == 0',但是'-1 // 2 == -1')。 – ShadowRanger
除法運算符表現了提問者在Python 3.x中的預期方式。我只是覺得我應該提到這一點。 – SwiftsNamesake
@SwiftsNamesake這是真的,雖然基於問題,我假設提問者使用2.7.x – icehockey38
同樣。我只是想澄清,如果任何其他用戶偶然發現這個問題。 – SwiftsNamesake