Python:为何cmath.exp(1j*math.pi)返回-1+1.2246063538223773e-16j而不是简单的-1
我在Python控制台里试着检查一下欧拉恒等式:
import math
import cmath
cmath.exp(1j*math.pi)
结果是:
-1+1.2246063538223773e-16j
难道结果不应该是-1吗?
2 个回答
5
对我来说,这已经差不多了——特别是因为 math.pi
这个值并不是完全精确的——考虑到这一点,如果它给你 -1+0j
这个结果,实际上就是错误的答案。
2
想象一下,你在做一个计算,但一开始你只有5位数字的圆周率(π),然后在每一步你都只保留5位有效数字。你觉得这样能得到准确的答案吗?当然不能,因为每一步的小错误都会导致最后的结果出错。
浮点数运算也是这样,只不过这次你用的是二进制,而不是十进制。