Python不受欢迎的复数

时间:2017-09-12 16:31:14

标签: python

>>> a = -27
>>> a ** (1/3)
(1.5000000000000004+2.598076211353316j)
>>> -27 ** (1/3)
-3.0

我必须将列表的数量提高到1/3,但是当数字为负数时,我得到一个复数。为什么这两个操作的结果有这样的差异,我怎么能避免第一个操作?

3 个答案:

答案 0 :(得分:0)

设置a=-27时,您也将负值分配给值。当您输入-27**(1/3)时,它首先计算指数,然后计算负号。这可能是您出问题的原因。

答案 1 :(得分:0)

您的操作订单有问题;权力优先于一元减去。

-27 ** (1/3)

评估为

- (27 ** (1/3))

不是

(-27) ** (1/3)    # gives a complex result

如果a为负数,要获得真正的根,则需要执行

-(-a)**(1/3)

答案 2 :(得分:0)

复数z有三个z**3根,因此对于z**(1/3),必须选择一个。z**(1/3)。传统的选择是具有最小自变量的z的所谓主值(即,它是相对于正实轴具有最小角度的那个)。如您所见,当if (z < 0): -((-z)**(1/3)) else: z**(1/3)为负实数时,它具有非零虚部。

我的建议是只进行T等测试(抱歉,如果我的语法错误)。