Python:为什么cmath.exp(1j * math.pi)给出答案-1 + 1.2246063538223773e-16j但不是简单的-1

时间:2013-02-15 15:38:39

标签: python math complex-numbers

所以我尝试在python控制台中检查Euler's İdentity

import math
import cmath
cmath.exp(1j*math.pi)

结果是:

-1+1.2246063538223773e-16j

不应该只是-1。

2 个答案:

答案 0 :(得分:4)

这对我来说非常接近 - 特别是因为math.pi不是无限精确的 - 考虑到这一点,如果它给你-1+0j,它实际上是错误的答案。

答案 1 :(得分:2)

想象一下你正在进行这个计算,但是你只用5位pi开始,然后在每个阶段你都会得到5个有效数字。你认为你会得到一个确切的答案吗?不,当然不是,每个阶段的微小错误都会在答案中产生错误。

浮点数学是相同的,除了这次你使用的是二进制而不是十进制。