我需要使用Python來計算形式的對象的對數蟒蛇對數計算錯誤非常小的複數
log(1 - n0 - n1*1j)
其中N0和N1是非常小的數字〜1.0E-27和1J是的虛數。
使用cmath.log給出了錯誤的答案
print cmath.log(1.0 - 1e-27 - 1.0e-27j)
(5e-55-1e-27j)
使用mpmath我能得到正確的結果,但只有當我詞組正確
import mpmath as mp
mp.prec = 100
print mp.log( mp.mpc(1.0) - mp.mpc(0.00000000000000000000000001) - mp.mpc(real='0.0', imag='1.0e-27'))
的參數給出
(-1.0000389695486766657204483072e-26 - 1.00000000000000000000000001e-27j)
(這是正確的答案) 而
print mp.log( mp.mpc(0.99999999999999999999999999) - mp.mpc(real='0.0', imag='1.0e-27'))
給
(5.0e-55 - 1.0e-27j)
這是怎麼回事? 只有使用cmath.log()才能得到正確的答案嗎?
「正確的答案」在我看來似乎在實際中偏離了一個數量級。 [Wolfram Alpha](http://www.wolframalpha.com/input/?i=log1p%28-1e-27-1e-27i%29)和我的直覺都表明實際部分應該更接近'-1e -27'。 – user2357112
我認爲,如果它只比9.99e-27更小,那它就大於1。 – egoburnswell
'0.00000000000000000000000001'是'1e-26',而不是'1e-27'。你爲什麼不用字符串初始化它,比如'mp.mpc(real ='0.0',imag ='1.0e-27')'? – user2357112