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() を使用するだけで正しい答えを得ることができますか?