2015-02-24 31 views
0

我正在尋找一種方法來準確計算Python中負數的根。我相信,我看都與浮點不準確,但似乎應該有一個方式來獲得這樣簡單的東西是正確的答案:Python中負數的準確根源

>>(-1+0j)**0.1 
(0.9510565162951535+0.3090169943749474j) 

我希望在回答這種情況是(0+1j)。雖然提高Python對第十個的反應接近-1,但我正在尋找一個更精確的方法得到的答案,即當提升到十分之一時,精確到-1,而不是真正接近-1。

有沒有一種方法可以正確地使用本機Python庫或sympy/numpy/scipy等來做到這一點?

+3

沒有這樣的東西*複數的第十個根。 Python給了你一個*第十個根,直到浮點表示的極限。你想如何指定你想要得到的根? – user2357112 2015-02-24 20:40:34

+1

值得注意的是,'0.1'不可能完全代表浮點數。嘗試'sum(0.1 for _ in range(8))'作爲它可能導致的舍入誤差的一個例子。 – Blckknght 2015-02-24 21:33:42

+0

@ user2357112將它們全部取出是很好的做法,如果可以的話,避免處理浮點是理想的。這就是我提到sympy的原因 - 我寧願用整數和i來表示符號回答,而不是浮點數。 – Marty 2015-02-24 21:56:45

回答

1

-1並非一個,而是十個複雜的第十個根。你只有一個。如果a是您的返回根,a ** 5也是根:

(A ** 5)** 10 =(A ** 10)** 5 =(-1)** 5 = -1

但是,如果你運行:

a = (-1 + 0j) ** 0.1 
print(a) 
print(a ** 5) 

你會得到:

(0.951056516295+0.309016994375j) 
(1.11022302463e-16+1j) 

你看a ** 5非常接近1j