我的代码:
import math
import cmath
print "E^ln(-1)", cmath.exp(cmath.log(-1))
它打印的内容:
E^ln(-1) (-1+1.2246467991473532E-16j)
它应该打印什么:
-1
(供参考,谷歌检查我的计算)
根据python.org 上的文档 cmath.exp(x)
返回 e^(x),并cmath.log(x)
返回 ln(x),所以除非我缺少分号或其他东西,否则这是一个非常简单的三行程序。
当我测试cmath.log(-1)
它返回 π i(技术上3.141592653589793j
)。哪个是对的。欧拉的恒等式表示 e^(π i ) = -1,但 Python 说当我提出 e^(π i ) 时,我得到了某种疯狂的谈话(特别是-1+1.2246467991473532E-16j
)。
为什么 Python 讨厌我,我该如何安抚它?
是否有一个图书馆可以让它做正确的数学,或者我必须向范罗森提供牺牲?这可能是某种浮点精度问题吗?
我遇到的最大问题是精度不够,以至于最终函数中的其他值看起来比实际零更接近 0(未显示),因此布尔测试毫无价值(即if(x==0)
),局部最小值等也是如此。 ..
例如,在下面的迭代中:
X = 2 Y= (-2-1.4708141202500006E-15j)
X = 3 Y= -2.449293598294706E-15j
X = 4 Y= -2.204364238465236E-15j
X = 5 Y= -2.204364238465236E-15j
X = 6 Y= (-2-6.123233995736765E-16j)
X = 7 Y= -2.449293598294706E-15j
3 和 7 实际上都等于 0,但它们似乎具有最大的虚部,而 4 和 5 根本没有实部。
对不起语气。非常沮丧。