Python 3.4似乎随机决定是否使用**
运算符返回数字的实数或复数根:
>>> (863.719-2500)
-1636.281
>>> -1636.281**(1/3)
-11.783816270504108
>>> (863.719-2500)**(1/3)
(5.891908135252055+10.205084243784958j)
有没有办法确保你在立方体生根时获得真正的根,而不是复杂的根?
答案 0 :(得分:6)
在第二种情况下,实际上是首先评估立方体根,然后应用减号,因此是真正的根。
即-1636.281**(1/3)
变为-(1636.281**(1/3))
。你可以使用类似的逻辑来获得真正的立方根。
但实际上,当做负数的立方根时,你总是在python中得到复数。
>>> -1636.281**(1/3)
-11.783816270504108
>>> (-1636.281)**(1/3)
(5.891908135252055+10.205084243784958j)
如果您想要实数,可以添加像
这样的代码def cube(x):
if x >= 0:
return x**(1/3)
elif x < 0:
return -(abs(x)**(1/3))
答案 1 :(得分:1)
https://docs.python.org/3/reference/expressions.html#the-power-operator
在功率和一元运算符的未加密码序列中,运算符从右到左进行求值(这不会限制操作数的求值顺序):
-1**2
得到-1
。
所以你的表达
-1636.281**(1/3)
实际上被评估为
-(1636.281**(1/3))