2013-02-15 141 views
0

于是,我就在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。

+4

浮点数学是不精确的。 – 2013-02-15 15:39:41

+3

和'math.pi'不是π – AakashM 2013-02-15 15:48:02

+1

在表达式中的其他值的精度内,*为* -1。 – PaulMcG 2013-02-15 16:57:39

回答

2

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

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

4

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

相关问题