我需要使用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() 得到正确答案吗?