以下IDLE輸出對我來說沒有意義。爲什麼我用分數的權力得到積極的結果?
>>> a=-1.0
>>> a**(1/3)
1.0
>>> a==-1.0
True
>>> -1.0**(1/3)
-1.0
爲什麼兩個理論上等價的語句返回不同的結果? Python(2.7)如何處理__pow__
方法的雙打,這是結果?我只是用整數來嘗試它,並得到相同的結果。除了計算__pow__
函數輸入的符號並將其複製到結果之外,我該如何解決這個問題?
以下IDLE輸出對我來說沒有意義。爲什麼我用分數的權力得到積極的結果?
>>> a=-1.0
>>> a**(1/3)
1.0
>>> a==-1.0
True
>>> -1.0**(1/3)
-1.0
爲什麼兩個理論上等價的語句返回不同的結果? Python(2.7)如何處理__pow__
方法的雙打,這是結果?我只是用整數來嘗試它,並得到相同的結果。除了計算__pow__
函數輸入的符號並將其複製到結果之外,我該如何解決這個問題?
這是運營商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作爲浮點數。
更不用說'1/3'是'0'。 – 2013-02-14 15:51:26
@PavelAnossov好點。 – 2013-02-14 15:51:56
@Pavel Anossov哦,對。我習慣3.3,但我使用2.7工作。 – Poik 2013-02-14 15:52:35
運算符優先級。 '-1 *(1 **(1/3))'。見http://docs.python.org/2/reference/expressions.html#operator-precedence – 2013-02-14 15:51:23
「分數權力的積極結果」你在這裏做的不是分數權力。嘗試'1.0/3'並將其與'1/3'比較。 – jadkik94 2013-02-14 15:52:49
Ouch。這是我的一個愚蠢的錯誤。謝謝! – Poik 2013-02-14 15:53:26