于是,我就在python控制台检查Euler's İdentity:的Python:为什么cmath.exp(1J * math.pi)给出了答案-1 + 1.2246063538223773e-16J,但不是简单-1
import math
import cmath
cmath.exp(1j*math.pi)
和结果是:
-1+1.2246063538223773e-16j
不应该只是-1。
于是,我就在python控制台检查Euler's İdentity:的Python:为什么cmath.exp(1J * math.pi)给出了答案-1 + 1.2246063538223773e-16J,但不是简单-1
import math
import cmath
cmath.exp(1j*math.pi)
和结果是:
-1+1.2246063538223773e-16j
不应该只是-1。
想象一下,你正在做这个计算,但是你只用pi的5个数字开始,然后在每个阶段你四舍五入到5个有效数字。你认为你会得到一个确切的答案?不,当然不是,每个阶段的微小错误都会在答案中产生错误。
浮点数学是相同的,除了这次你在二进制而不是十进制。
这对我来说足够接近 - 特别是因为math.pi
不是无限精确的 - 考虑到这一点,如果它给了你-1+0j
,它实际上是错误的答案。
浮点数学是不精确的。 – 2013-02-15 15:39:41
和'math.pi'不是π – AakashM 2013-02-15 15:48:02
在表达式中的其他值的精度内,*为* -1。 – PaulMcG 2013-02-15 16:57:39