Python:为何cmath.exp(1j*math.pi)返回-1+1.2246063538223773e-16j而不是简单的-1

0 投票
2 回答
2601 浏览
提问于 2025-04-17 16:00

我在Python控制台里试着检查一下欧拉恒等式

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

结果是:

-1+1.2246063538223773e-16j

难道结果不应该是-1吗?

2 个回答

5

对我来说,这已经差不多了——特别是因为 math.pi 这个值并不是完全精确的——考虑到这一点,如果它给你 -1+0j 这个结果,实际上就是错误的答案。

2

想象一下,你在做一个计算,但一开始你只有5位数字的圆周率(π),然后在每一步你都只保留5位有效数字。你觉得这样能得到准确的答案吗?当然不能,因为每一步的小错误都会导致最后的结果出错。

浮点数运算也是这样,只不过这次你用的是二进制,而不是十进制。

撰写回答