2013-02-14 35 views
3

以下IDLE輸出對我來說沒有意義。爲什麼我用分數的權力得到積極的結果?

>>> a=-1.0 
>>> a**(1/3) 
1.0 
>>> a==-1.0 
True 
>>> -1.0**(1/3) 
-1.0 

爲什麼兩個理論上等價的語句返回不同的結果? Python(2.7)如何處理__pow__方法的雙打,這是結果?我只是用整數來嘗試它,並得到相同的結果。除了計算__pow__函數輸入的符號並將其複製到結果之外,我該如何解決這個問題?

+2

運算符優先級。 '-1 *(1 **(1/3))'。見http://docs.python.org/2/reference/expressions.html#operator-precedence – 2013-02-14 15:51:23

+1

「分數權力的積極結果」你在這裏做的不是分數權力。嘗試'1.0/3'並將其與'1/3'比較。 – jadkik94 2013-02-14 15:52:49

+0

Ouch。這是我的一個愚蠢的錯誤。謝謝! – Poik 2013-02-14 15:53:26

回答

6

這是運營商precendence問題:

>>> -1.0**(1/3) 
-1.0 
>>> (-1.0)**(1/3) 
1.0 

另外,還要注意(1/3)爲零,除非你從__future__,這給Python的3.x的行爲(和ValueError)導入division。使用1/3.獲得1/3作爲浮點數。

+5

更不用說'1/3'是'0'。 – 2013-02-14 15:51:26

+0

@PavelAnossov好點。 – 2013-02-14 15:51:56

+0

@Pavel Anossov哦,對。我習慣3.3,但我使用2.7工作。 – Poik 2013-02-14 15:52:35

相關問題