0 == ((-1)**.5).real
...在python 3.5.1中为False,而:
0 == complex(0,1).real
...是真的。这两个案件的处理方式有何不同?何时浮点类的零检测功能何时起作用?何时不起作用?
答案 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)不能精确地表示为二进制分数,因此结果不是完全你手工计算所期望的。您可以应用各种“在容差范围内相等”的功能来解决此问题。