2013-07-19 64 views
18

當我在終端ValueError異常:負數不能被提高到一個分數功率

>>> (-3.66/26.32)**0.2 

嘗試這樣做,我得到了以下錯誤

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: negative number cannot be raised to a fractional power 

但是,我能夠做到這一點分兩步like,

>>> (-3.66/26.32) 
-0.13905775075987842 
>>> -0.13905775075987842 ** 0.2 
-0.6739676327771593 

爲什麼會這樣?單線解決這個問題的方法是什麼?

+0

(可能)相關:http://stackoverflow.com/questions/4114740/negative-pow-in-python – TerryA

+0

@ Haidro,是的,我看到了這個問題,但我的問題是(-1.07)** 1.3是拋出錯誤,但-1.07 ** 1.3是不是拋出錯誤,爲什麼? –

+0

我認爲這涉及到複數。負1的平方根(分數冪)是i。它認爲它進入了複雜的數字領域時就打包了。 – Jiminion

回答

17

提高權力優先於一元減號。

所以,你必須-(0.13905775075987842 ** 0.2)而不是(-0.13905775075987842) ** 0.2如您所願:

>>> -0.13905775075987842 ** 0.2 
-0.6739676327771593 
>>> (-0.13905775075987842) ** 0.2 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: negative number cannot be raised to a fractional power 

如果你想要的工作,你應該寫(-3.66/26.32 + 0j)**0.2

>>> (-3.66/26.32 + 0j)**0.2 
(0.5452512685753758+0.39614823506888347j) 

或切換的Python 3由@TimPietzcker指出。

+4

您也可以使用強制轉換來提升爲複數:'x = -1; complex(x)** 0.5' –

+0

@Prashant,基本上與'-1 + 0j'相同 –

+0

是的。只需添加另一種方式就可以完成。這是一個很小的筆記,它不值得一個單獨的答案。 –

7

切換到Python 3自動地促進結果的複數:

>>> (-3.66/26.32)**0.2 
(0.5452512685753758+0.39614823506888347j) 
+2

我的老闆只能做出決定。 –

相關問題