python:为什么在将i计算为指数后,浮点数的零检测失败?

时间:2016-05-24 00:35:30

标签: python floating-point complextype exponent

0 == ((-1)**.5).real

...在python 3.5.1中为False,而:

0 == complex(0,1).real

...是真的。这两个案件的处理方式有何不同?何时浮点类的零检测功能何时起作用?何时不起作用?

2 个答案:

答案 0 :(得分:6)

>>> (-1)**0.5
(6.123233995736766e-17+1j)

所有这一切 - 由于浮点变幻莫测,计算结果的实部并非完全为零。但在另一种情况下,它是:

>>> complex(0,1).real
0.0

顺便说一下,**调用一个通用的求幂例程,它会在封面下添加几层浮点舍入错误。如果你知道你想要一个平方根,那么使用平方根函数会更好:

>>> import cmath
>>> cmath.sqrt(-1)
1j

答案 1 :(得分:2)

计算分数幂 - 稍微简化 - 如 r cis theta 。由于theta(pi)不能精确地表示为二进制分数,因此结果不是完全你手工计算所期望的。您可以应用各种“在容差范围内相等”的功能来解决此问题。