的Python 3.4看似隨機決定是否返回使用**
運營商的實數或複數根:如何在Python3中獲取負數的實數立方根?
>>> (863.719-2500)
-1636.281
>>> -1636.281**(1/3)
-11.783816270504108
>>> (863.719-2500)**(1/3)
(5.891908135252055+10.205084243784958j)
有沒有一種方法,以確保你當立方體生根,而不是複雜的一個真正根源那些?
的Python 3.4看似隨機決定是否返回使用**
運營商的實數或複數根:如何在Python3中獲取負數的實數立方根?
>>> (863.719-2500)
-1636.281
>>> -1636.281**(1/3)
-11.783816270504108
>>> (863.719-2500)**(1/3)
(5.891908135252055+10.205084243784958j)
有沒有一種方法,以確保你當立方體生根,而不是複雜的一個真正根源那些?
在第二種情況下,實際上立方體根是首先被評估,然後減號被應用,因此是真正的根。
即-1636.281**(1/3)
變成-(1636.281**(1/3))
。你也可以使用類似的邏輯來獲得真實的立方根。
但實際上,當做負數的立方根時,你總是會在python中得到複數。
>>> -1636.281**(1/3)
-11.783816270504108
>>> (-1636.281)**(1/3)
(5.891908135252055+10.205084243784958j)
如果你想真正的號碼,你可以像添加代碼 -
def cube(x):
if x >= 0:
return x**(1/3)
elif x < 0:
return -(abs(x)**(1/3))
噢,這可以解釋奇怪的行爲。此外,代碼可以改善,因爲0 **(1/3)是0,如果x> = 0,則可以執行操作:... else:... –
我沒有' t瞭解關於'0'的註釋,它已經爲'0'返回'0' –
是的,正確的,抱歉的複製粘貼錯誤:) –
https://docs.python.org/3/reference/expressions.html#the-power-operator
在功率和一元運算符的括號的順序,符從右到左求(這不限制操作數的評估順序):
-1**2
結果爲-1
。
所以,你的表達
-1636.281**(1/3)
實際上評爲
-(1636.281**(1/3))
在你的第一個例子中,操作的順序,意味着你正在服用的積極1636.281立方根,然後取結果不利。 – BrenBarn
這不是隨機的,而是將'z ** p'定義爲'exp(p * log(z))'的結果,其中複數對數有一個分支切割,將其虛部置於區間(-π,π) 。 – dan04